gpt4 book ai didi

java - DOM4J utf-8 编码 Umlaute(Ä,ü,ß) 错误

转载 作者:数据小太阳 更新时间:2023-10-29 02:23:22 30 4
gpt4 key购买 nike

我正在使用 DOM4j 来解析和编写始终采用 UTF-8 格式的 XML 树。

我的 XML 文件包含德语特殊字符。解析它们不是问题,但是当我将树写入文件时,特殊字符被转换为 � 字符。

我无法更改 XML 文件的编码,因为它仅限于 UTF-8

代码

SAXReader xmlReader = new SAXReader();
xmlReader.setEncoding("UTF-8");

Document doc = xmlReader.read(file);
doc.setXMLEncoding("UTF-8");
Element root = doc.getRootElement();

// manipulate doc

OutputFormat format = new OutputFormat();

format.setEncoding("UTF-8");

XMLWriter writer = new XMLWriter(new FileWriter(file), format);

writer.write(doc);
writer.close();

预期输出

... 
<statementText>This is a test!Ä Ü ß</statementText>
...

实际输出

...
<statementText>This is a test!� � �</statementText>
...

最佳答案

您正在将 FileWriter 传递给 XMLWriterWriter 已经处理了 Stringchar[] 数据,所以它已经处理了编码,这意味着 XMLWriter没有机会影响它。

另外 FileWriter 是一个特别有问题的 Writer 类型,因为您永远无法指定它应该使用哪种编码,而是它总是使用平台默认编码(这通常是什么例如 Windows 上的 ISO-8859-1 和 Linux 上的 UTF-8)。出于这个原因,它基本上不应该被使用。

要让 XMLWriter 应用作为配置给定的内容,请将 OutputStream 传递给它(它处理 byte[])。此处使用的最明显的一个是 FileOutputStream:

XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);

这甚至记录在 JavaDoc for XMLWriter 中:

Warning: using your own Writer may cause the writer's preferred character encoding to be ignored. If you use encodings other than UTF8, we recommend using the method that takes an OutputStream instead.

可以说警告有点误导,因为即使您打算写入 UTF-8 数据,Writer 也可能有问题。

关于java - DOM4J utf-8 编码 Umlaute(Ä,ü,ß) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50910594/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com