StAX - writeCharacters(),如何不逃避中文,日文字符?

时间:2010-12-07 07:27:58

标签: java

XMLStreamWriter #writeCharacters(...)

writeCharacters(...)方法用于转义诸如&,<,>和“之类的字符。 (来自http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/StAX4.html

但是当我写一些中文,日文字符和输出XML时 文件不是以“UTF-8”编码,而是“GBK”或“Shift-JIS”。中文,日文字符也被转义,就像

一样

“汉语,英语,にほんご”---> “汉语,English,にほんご”

无论如何要解决它?


public static void main(String[] args) throws Exception {  
    // GBK  
    System.out.println("JVM default charset = " + Charset.defaultCharset());  

    String s = "汉语, English, にほんご";  

    XMLOutputFactory output = XMLOutputFactory.newInstance();  
    output.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, false);  

    OutputStream out = new FileOutputStream("C:/aa.txt");  
    XMLStreamWriter writer = output.createXMLStreamWriter(out, "UTF-8");  
    // When output encoding is "UTF-8", result is something like:  
    // <?xml version='1.0' encoding='UTF-8'?><a>汉语, English, にほんご</a>  

    // When output encoding is "GBK", result is something like:  
    // <?xml version='1.0' encoding='GBK'?><a>&#x6c49;&#x8bed;, English, &#x306b;&#x307b;&#x3093;&#x3054;</a>  

    writer.writeStartDocument();  
    writer.setDefaultNamespace("http://c");  
    writer.writeStartElement("http://c", "a");  

    writer.writeCharacters(s);  
    writer.writeEndElement();  
    writer.flush();  
}  

1 个答案:

答案 0 :(得分:0)

创建作者时,

用户XMLOutputFactory.createXMLEventWriter(stream, "UTF-8")。我相信这应该可以解决你的问题。

我没有使用过这个特定的API,但我使用了很多其他API。例如,如果编码不支持字符,则Properties.store()方法会自动执行转义。