将特殊字符转换为垃圾字符的Java代码
我面临的一个问题是,当我从Java程序发布一条带有特殊字符的json消息时,这个特殊字符(比如“in O'Reilly”)被替换为?。 如果我从邮递员那里发同样的信息,我会得到正确的回复。 你能建议如何处理这个问题吗 多谢各位 下面是我正在使用的代码和json: {“姓”:“O'Reilly”,“名”:“Shaun”} 我期望正确的输出为(当我使用postman时,我能够得到): 但是当我使用java代码('replacemented with?)时,我就明白了这一点将特殊字符转换为垃圾字符的Java代码,java,json,special-characters,Java,Json,Special Characters,我面临的一个问题是,当我从Java程序发布一条带有特殊字符的json消息时,这个特殊字符(比如“in O'Reilly”)被替换为?。 如果我从邮递员那里发同样的信息,我会得到正确的回复。 你能建议如何处理这个问题吗 多谢各位 下面是我正在使用的代码和json: {“姓”:“O'Reilly”,“名”:“Shaun”} 我期望正确的输出为(当我使用postman时,我能够得到): 但是当我使用java代码('replacemented with?)时,我就明白了这一点 尝试更改您的线路: pos
尝试更改您的线路:
post_data.addHeader("Content-Type","application/json");
到
此外,可能是数据正常,只有显示不正确。帮助我无数次诊断类似问题的是将“有问题的”字符串转换为Unicode序列。在那里,您可以看到数据本身是否正确,并且只有显示器损坏或数据本身损坏。
有一个开源java库MgntUtils,它有一个实用程序,可以将字符串转换为unicode序列,反之亦然:
result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
此代码的输出为:
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World
该库可以在或处找到,它作为maven工件提供,并带有源代码和JavaDoc
下面是这个类的JavaDoc。在该库中,还有一个非常简单的示例。谢谢大家的帮助。它在代码的下面一行更改后工作:
StringEntity params =new StringEntity(json_req,"UTF-8");
下面的文章非常有用
如果您在控制台中打印此文件,则可能它不支持
”
编码当您将json_req
打印到System.out
时会发生什么?这将有助于确定问题是否出在输出中,正如Saharsh所建议的。请看这个问题:@Saharsh,Console支持并打印该字符。@JoachimSauer,它在Syste.out内正确打印:“lastName”:“O'Reilly”谢谢Michael的宝贵建议。当我在下面的行中更改时,它工作了:StringEntity参数=新的StringEntity(json_req,“UTF-8”);
post_data.addHeader("Content-Type","application/json; charset=utf-8");
result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World
StringEntity params =new StringEntity(json_req,"UTF-8");