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

时间:2020-04-08 15:43:04

标签: java json encoding utf-8

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

下面是导致问题的数据之一。

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

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

我已经尝试了几种解决方案,例如在线获得的解决方案,例如使用java charset方法等转换为字节数组然后返回的方法,但是它们没有用。它们要么转换有效值,要么像中文/日语字符一样转换,或者根本不工作。

您能对此提供一些输入吗?

2 个答案:

答案 0 :(得分:0)

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

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

否则,它默认为“平台默认编码”,这是以前在任何运行的系统上用于文本文件的某种编码。

答案 1 :(得分:-1)

使用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"));