我正在編寫一個帶有Java的Xml Tag Renamer
類,它讀取XML,重命名標記並使用DocumentBuilderFactory
和TransformerFactory
(保留文本節點)將它們寫回到另一個XML文件中。它以前用德文和英文文本工作得很好,直到今天,當我試圖用俄文文本重命名XML文件時。我在新創建的XML文件中獲得了?????
,而不是源文本。我試過設置編碼用XML寫俄語
任何想法如何糾正?
PS。在進入TransformerFactory前,字符串是正確的,因爲我在調試器中檢查過。我試過將OutputKeys.ENCODING
設置爲UTF-8
和ISO-8859-5
。他們都沒有幫助。
變壓器的地方:
// Output the XML
// Set up a transformer
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
// Fix to a bug about indent in transformer
transformer.setOutputProperty
("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// TODO encoding parameter
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// Create string from xml tree
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = sw.toString();
xmlString.replaceAll("\n", System.getProperty("line.separator"));
// Write to file
BufferedWriter output = new BufferedWriter(new FileWriter(outputPath));
output.write(xmlString);
output.close();
謝謝!它適用於您的代碼! 我調整了我的一點,它似乎關鍵在'OutputStreamWriter'上。問題可能在於'FileWriter''「這個類的構造函數假定默認的字符編碼和默認的字節緩衝區大小是可以接受的。」(JavaDoc)和'OutputStreamWriter'支持自定義編碼。 再次感謝它! – 2010-04-03 11:09:57