java - 特殊字符变形为它们的 XML 编号参考 Java、tomcat9
问题描述
我最近将我的一个应用程序从 Tomcat6 更新到 Tomcat9 和 Java8 到 OpenJDK 11、Linux,当我提交特殊字符(如日文/中文字符)时,我发现我的表单出现问题。
看起来问题不是来自代码,因为我尝试在旧的 Tomcat6/Java8 框中运行应用程序并且特殊字符没有被转换。这可能是一些服务器配置,但我不确定在哪里看。
我输入“法敲中”,它被转换成 27861; 25970; 20013; 一旦我提交表格
解决方案
这似乎是正常的行为。您看到的数字是等同于“\u6cd5\u6572\u4e2d”的 XML 编码 - 符号“法敲中”的 unicode 代码 XML 解析器希望确保 xml 字符串可以通过简单的英文编码(ISO8859-1 ) 并且这些符号无法在该编码中传递。因此,它将其转换为 unicode 等效项,因此即使 ISO8859-1 字符集不支持它们,它仍然可以“理解”和解码非标准符号。这是一种预防措施,因为如果您使用 UTF-8,它会顺利通过。无论如何,我使用了一个我觉得非常有用的工具来测试它。它将任何字符串转换为 Unicode 字符并返回。这是我所做的:
System.out.println(StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("法敲中"));
结果来了\u6cd5\u6572\u4e2d
。如果你想使用这个工具,它是 MgntUtils 开源库(由我编写)的一部分。以下是Maven Artifacts、Github(包括源代码和 javadoc)和javadoc的链接。您也可以在此处阅读有关图书馆的信息
推荐阅读
- kotlin - 为什么匕首需要提供我不想提供的实体?
- python - 尝试使用 Cloud TPU 恢复更新的 BERT 模型检查点时出现 InfeedEnqueueTuple 问题
- java - 如何在 Javafx 的 TreeView 中设置单元格的缩进
- api - 通过 API 上传 Wistia 可恢复视频
- css - 已尝试此站点上的所有方法,但 img 下面的空白仍然存在
- java - Java/Spring - 在 HttpRequest 中设置属性并覆盖先前的值
- mysql - 如何设计 SQL 子查询?
- android - 无法连接两个安卓模拟器
- c# - 当值无效时,如何只允许按下取消按钮?
- java - Math.toIntExact 在 lambda 表达式中?