如何防止 Java 将 XML 文件中的“&”更改为“&”

How to prevent Java from changing "&" to "&" in XML file

我需要使用 Java 构建一个 XML 文件。问题是我必须使用一些特殊字符,如“ć”,然后在我的移动应用程序中阅读它。

如果我在我的 XML 文件的记事本中手动将 <tag>ć</tag> 更改为 <tag>&#263;</tag>,它会正常工作。但是当我尝试在 java 中执行此操作时,例如使用:

result = result.replaceAll("ć", "&#263;");

我收到类似 <tag>&amp;#263;</tag> 的信息,这会导致我的客户端应用程序显示错误。

我该怎么做才能在不进行任何解析的情况下将 ć 替换为 &#263;

Java XML API 会根据文件输出编码的需要处理转义字符,因此您不应从代码中执行任何 'special characters' 替换。

我想我明白你想做什么。我不知道是否有办法在不解析的情况下做你正在做的事情。因为 & 是 XML 中的特殊字符,所以您必须将其转义或将元素的内容包装在 CDATA 块中,这样它就不会被 XML 解析器解析。

import org.junit.Test;

public class AsciiTesting {

    @Test
    public void parse() {
        final String myString = "ćabc123ć";
        System.out.println(myString.replaceAll("ć", "&#263;"));
        // Then wrap the <tag> content with <![CDATA[ put your replaced string here ]]>
    }

}

在使用 XML 序列化程序时,您不会接触原始标记。 XML 工具的全部目的是让您可以编写纯文本内容,而不必担心使用正确的转义形式。

正确的做法是将 ć 保留在原处,让序列化程序将其写入适当的编码,最好是 UTF-8,因为这是 [=24= 的默认且唯一合理的编码] 文件。注意:不要相信记事本中的输出结果。记事本是一个无望的编辑器,它默认使用无用的特定于语言环境的编码。使用更好的编辑器,例如 Notepad++,它会向您显示它使用什么编码来显示文件并让您更改它。

如果您在文件中看到 ć,并且编辑器告诉您它以 UTF-8 格式读取文件,但移动应用程序仍然无法正确读取它,那么这些应用程序已损坏,应该是已修复。

如果您无法修复它们并且必须暂时解决它,最好的办法是告诉您的 XML 序列化程序写入 ASCII 编码而不是 UTF-8。由于 ASCII 不能直接容纳像 ć 这样的字符,因此序列化程序将编码为 &#263; 以进行补偿。设置编码的方式取决于您使用什么来生成 XML;例如对于 Transformer 你可能 setOutputProperty(OutputKeys.ENCODING, "US-ASCII");.