繁体   English   中英

如何确保 JSON 字符串是 UTF-8 编码在 Java

[英]How to ensure that the JSON string is UTF-8 encoded in Java

我正在处理旧版 web 服务客户端代码,其中 JSON 数据正在发送到 web 服务。 最近发现对于JSON body中的一些请求,由于Z0ECD11C1D7A287401D148A23BBD7A2F8 Body中的无效字符(非UTF8),服务给HTTP 400响应。

以下是导致问题的数据的一个示例。

String value = "zu3z5eq tô‰U\f‹Á‹€z";

我正在使用org.json.JSONObject.toString()方法生成 JSON 字符串。 请告诉我如何确保 JSON 字符串是 UTF-8 编码的?

我已经尝试了一些在线解决方案,例如转换为字节数组然后返回,使用 java 字符集方法等,但它们不起作用。 它们要么像中文/日文字符一样转换有效值,要么根本不起作用。

您能否就此提供一些意见?

您需要在创建时设置OutputStreamWriter的字符编码:

 httpConn.connect();
 wr = new OutputStreamWriter(httpConn.getOutputStream(), StandardCharsets.UTF_8); 
 wr.write(jsonObject.toString());
 wr.flush();

否则,它默认为“平台默认编码”,这是一种历史上已用于您正在运行的任何系统上的文本文件的编码。

使用 Base64 编码将值转换为 Byte[]。

  String value = "zu3z5eq tô‰U\f‹Á‹€z";

    // WHILE  SENDING  ENCODE THE VALUE
    byte[] encodedBytes = Base64.getEncoder().encode(value.getBytes("UTF-8"));
    String encodedValue = new String(encodedBytes, "UTF-8");

    // TRANSPORT....

    // ON RECEIVING END DECODE THE  VALUE
    byte[] decodedBytes = Base64.getDecoder().decode(encodedValue.getBytes("UTF-8"));
    System.out.println( new  String(decodedBytes, "UTF-8"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM