首页 > 解决方案 > 特殊字符变形为它们的 XML 编号参考 Java、tomcat9

问题描述

我最近将我的一个应用程序从 Tomcat6 更新到 Tomcat9 和 Java8 到 OpenJDK 11、Linux,当我提交特殊字符(如日文/中文字符)时,我发现我的表单出现问题。

看起来问题不是来自代码,因为我尝试在旧的 Tomcat6/Java8 框中运行应用程序并且特殊字符没有被转换。这可能是一些服务器配置,但我不确定在哪里看。

我输入“法敲中”,它被转换成 27861; 25970; 20013; 一旦我提交表格

标签: javatomcat9

解决方案


这似乎是正常的行为。您看到的数字是等同于“\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 ArtifactsGithub(包括源代码和 javadoc)和javadoc的链接。您也可以在此处阅读有关图书馆的信息


推荐阅读