java - 触发 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 时也有解决方案,因为它会产生相同的问题。
需要你的帮助。谢谢!
解决方案
一点研究表明:
- 的 unicode 代码点是 u+2836D
- 的 unicode 代码点是 u+2002A
两者都是代码平面 2 中的代码点。
我怀疑问题在于您的客户端或服务器端软件堆栈处理不在 Unicode 代码平面 0(又名 BMP)中的字符的方式。当数据转换为(或,等)char
数组时,这些值表示为 2 个值。一些(旧)库和许多自定义代码无法正确处理此问题。char
String
StringBuffer
我建议您执行以下操作:
- 复习你对 Unicode、UTF-16、UTF-8 和“代理对”的理解。
- 重温使用 Java 调试器的技能。
- 使用调试器找出客户端和服务器端1发生的情况。
找到导致问题的原因后:
- 如果是您的代码,请修复它。
- 如果是其他人的代码,请提交错误报告和/或寻找已经解决问题的更新版本。
1 - 在关键点设置断点并查看char
传递数据的数据结构中的值。寻找价值似乎“坏”的地方。
推荐阅读
- javascript - 接收 Ajax 响应
- react-native - React Native 中未定义 TextInput 的输出
- mvvm - 如何在 SwiftUI 中从另一个视图中更新一个视图
- security - AzureAD:为外部 API“系统”消费者使用长期刷新令牌?
- asp.net - 如何查找特定字符串和动态字符串
- .net-core - 如何为匿名用户创建授权策略
- java - 监听方法调用
- kubernetes - kustomize 构建错误累积资源
- java - 如何使用内部连接查询表在spring data jpa中实现基于接口的投影到dto
- java - Map.of() 返回什么类实例?