我遇到了XML编码问题。 当我在localhost上使用cp1251编码创建XML时,所有很酷 但是当我在服务器上部署我的模块时,xml文件有不正确的符号,如“ФайлПФД
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
DOMSource source = new DOMSource(doc);
transformer.setOutputProperty(OutputKeys.ENCODING, "cp1251");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
String attach = writer.toString();
我如何解决它?
答案 0 :(得分:3)
我尝试读取Document
编码的UTF-8
,并尝试使用不同的编码对其进行转换,该编码根本没有效果(现有编码)使用该文档而不是我使用output属性指定的文档。在内存中创建新文档时(编码为空),正确使用了输出属性。
在转换XML Document
时,输出属性OutputKeys.ENCODING
仅在org.w3c.dom.Document
不尚未编码时使用。
<强>解决方案强>
要更改XML文档的编码,请不要使用Document
作为源,而是使用根节点(文档元素)。
// use doc.getDocumentElement() instead of doc
DOMSource source = new DOMSource(doc.getDocumentElement());
像魅力一样。
来源文件:
<?xml version="1.0" encoding="UTF-8"?>
<foo bla="Grüezi">
Encoding test äöüÄÖÜ «Test»
</foo>
使用“cp1251”输出:
<?xml version="1.0" encoding="WINDOWS-1251"?><foo bla="Grüezi">
Encoding test äöüÄÖÜ «Test»
</foo>
答案 1 :(得分:0)
A(String)Writer不受输出编码的影响(仅来自使用的输入编码),因为Java维护Unicode中的所有文本。写入二进制文件,或将字符串输出为Cp1251。
请注意,编码应位于<?xml encoding="Windows-1251">
行。我想&#34; Cp1251&#34;是特定于java的。
所以错误可能在于写字符串;例如
response.setCharacterEncoding("Windows-1251");
response.write(attach);
或者
attach.getBytes("Windows-1251")