希望你们中的一些人已经遇到过这个问题并且已经解决了。
我遇到了一些中文字符的问题,例如('𨍭','𠀪'),因为当触发 REST 调用时,它们会转换为 'ࠀª' 而我们的后端系统无法解释这一点。
我创建了一个简单的 springboot 程序来检查。见下文。字符编码设置为UTF-8
@RequestMapping(value="/chinese", method= RequestMethod.POST, produces="application/json", consumes="application/json;charset=UTF-8")
public String interpret(@RequestBody SampleRESTBean bean ) {
String value = bean.getChineseName();
return value;
}
下面的bean对象
public class SampleRESTBean {
private String chineseName;
public String getChineseName() {
return chineseName;
}
public void setChineseName(String chineseName) {
this.chineseName = chineseName;
}
现在,为了测试(在 Postman 中),我的 JSON 对象设置如下
{"chineseName":"𨍭獲𠀪保意外,另危疾加1/1000" }
当对象位于方法内部时,它看起来像这样 获ࠀª保意外,另危疾加1/1000
其他汉字被解释,但某些特定字符不被解释。
对于这种问题有解决办法吗?我搜索了很多引用资料,但仍然无法解决这个问题。另外,如果您在使用 JAX-RS 时也有解决方案,因为它会产生相同的问题。
需要您的帮助。谢谢!
最佳答案
一些研究表明:
- 𨍭 的 unicode 代码点是 u+2836D
- 𠀪 的 unicode 代码点是 u+2002A
两者都是代码平面 2 中的代码点。
我怀疑问题在于您的客户端或服务器端软件堆栈处理不在 Unicode 代码平面 0(也称为 BMP)中的字符的方式。当数据转换为 char
数组(或 String
、StringBuffer
>,等等。)一些(旧的)库和许多自定义代码不能正确处理这个问题。
我建议您执行以下操作:
- 温习一下您对 Unicode、UTF-16、UTF-8 和“代理对”的理解。
- 温习使用 Java 调试器的技能。
- 使用调试器了解客户端和服务器端发生的情况1。
找到导致问题的原因后:
- 如果这是您的代码,请修复它。
- 如果是其他人的代码,请提交错误报告和/或查找已修复问题的新版本。
1 - 在关键点设置断点并查看传递数据的数据结构中的 char
值。寻找值似乎变得“糟糕”的地方。
关于java - 触发 REST 调用时无法解释某些汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965076/