触发REST调用时无法解释某些汉字

时间:2019-03-03 02:38:25

标签: java

希望有些人已经遇到此问题并已解决。

我一直遇到一些中文字符(如('','')的问题,因为触发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;
}

现在,要测试(在邮递员中),我的JSON对象设置如下

{"chineseName":"獲保意外,另危疾加1/1000" }

当对象位于方法内部时,它看起来像这样 获ࠀª保意外,另危疾加1/1000

其他汉字会被解释,但某些特定字符不会被解释。

是否存在针对此类问题的解决方案?我搜索了很多参考文献,但仍然无法解决此问题。另外,如果您在使用JAX-RS时也有解决方案,因为它会产生相同的问题。

请需要您的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

一些研究表明:

  • 其的Unicode代码点是u + 2836D
  • 的Unicode代码点是u + 2002A

两者都是代码平面2中的代码点。

我怀疑问题出在您的客户端或服务器端软件堆栈正在处理不在Unicode代码平面0(又称为BMP)中的字符的方式。当数据转换为char(或charString等数组)时,这些值表示为2个StringBuffer值。一些(旧)库和一个许多自定义代码无法正确处理此问题。

我建议您执行以下操作:

  1. 深入了解Unicode,UTF-16,UTF-8和“代理对”。
  2. 掌握使用Java调试器的技能。
  3. 使用调试器找出客户端和服务器端 1 发生的情况。
  4. 一旦找到导致问题的原因:

    • 如果这是您的代码,请对其进行修复。
    • 如果这是别人的代码,请提交错误报告和/或寻找已经解决问题的较新版本。

1-在关键点设置断点,并查看传递数据的数据结构中的char值。寻找值似乎在哪里变“坏”。