[英]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.