我正在处理旧版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方法等转换为字节数组然后返回的方法,但是它们没有用。它们要么转换有效值,要么像中文/日语字符一样转换,或者根本不工作。
您能对此提供一些输入吗?
答案 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"));