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

标签 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;
}

现在,为了测试(在 Postman 中),我的 JSON 对象设置如下

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

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

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

对于这种问题有解决办法吗?我搜索了很多引用资料,但仍然无法解决这个问题。另外,如果您在使用 JAX-RS 时也有解决方案,因为它会产生相同的问题。

需要您的帮助。谢谢!

最佳答案

一些研究表明:

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

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

我怀疑问题在于您的客户端或服务器端软件堆栈处理不在 Unicode 代码平面 0(也称为 BMP)中的字符的方式。当数据转换为 char 数组(或 StringStringBuffer >,等等。)一些(旧的)库和许多自定义代码不能正确处理这个问题。

我建议您执行以下操作:

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

    • 如果这是您的代码,请修复它。
    • 如果是其他人的代码,请提交错误报告和/或查找已修复问题的新版本。
<小时/>

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

关于java - 触发 REST 调用时无法解释某些汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965076/

相关文章:

java - 是否可以接受字符串数组作为 corba idl 文件中的参数

java - jsp/servlet 中的聊天网站

java - 打印从 0 开始的数字输入

java - java中的排序方法

java - 无法使用spring boot从另一台服务器连接rabbitmq

java - JPA递归延迟加载失败

java - 使用 BufferedReader 读取行

java - WebDriver + TestNG Gmail 一个奇怪的错误

java - 在 Tomcat 中作为 WAR 运行的 Grails 项目中 Maven-build JAR 的 SLF4J 配置位置

java - 使用 SharedPrefernces 对来自 RecyclerView 的整数求和