Jak*_*chs 3 java xml utf-8 character-encoding dom4j
我DOM4j用于解析和编写始终在UTF-8中的XML-Tree 。
我的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();
Run Code Online (Sandbox Code Playgroud)
预期产量
...
<statementText>This is a test!Ä Ü ß</statementText>
...
Run Code Online (Sandbox Code Playgroud)
实际产量
...
<statementText>This is a test!? ? ?</statementText>
...
Run Code Online (Sandbox Code Playgroud)
您正在将传递FileWriter给XMLWriter。一个Writer已经处理String或char[]数据,因此它已经处理了编码,这意味着XMLWriter不会影响它。
另外,这FileWriter是一个特别有问题的Writer类型,因为您永远无法指定应使用哪种编码,而是始终使用平台默认编码(在Windows上通常类似于ISO-8859-1,在Linux上类似于UTF-8)。出于这个原因,基本上不应该使用它。
要让XMLWriter应用程序根据配置提供给它,请将其传递给OutputStream来代替(它处理byte[])。在此使用的最明显的方法是FileOutputStream:
XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
Run Code Online (Sandbox Code Playgroud)
JavaDocXMLWriter甚至针对以下内容进行了记录:
警告:使用您自己的Writer可能会导致忽略编写者的首选字符编码。如果您使用的编码不是UTF8,建议使用采用OutputStream的方法。
可以说警告有点误导,因为Writer即使您打算写入UTF-8数据,警告也会有问题。
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |