首页 > 解决方案 > 触发 REST 调用时,部分汉字无法解释

问题描述

希望你们中的一些人已经遇到了这个问题并且已经解决了这个问题。

我遇到了一些像 ('','') 这样的中文字符的问题,因为当触发 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 时也有解决方案,因为它会产生相同的问题。

需要你的帮助。谢谢!

标签: java

解决方案


一点研究表明:

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

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

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

我建议您执行以下操作:

  1. 复习你对 Unicode、UTF-16、UTF-8 和“代理对”的理解。
  2. 重温使用 Java 调试器的技能。
  3. 使用调试器找出客户端和服务器端1发生的情况。
  4. 找到导致问题的原因后:

    • 如果是您的代码,请修复它。
    • 如果是其他人的代码,请提交错误报告和/或寻找已经解决问题的更新版本。

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


推荐阅读