2010-12-07 21 views
0

てXMLStreamWriterの#のwriteCharacters(...)StAX - 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"で表されます。

"汉语、英語、にほんご" ---> "&#x6c49; &#x8bed; English、&#x306b; &#x307b; &#x3093; &#1 x3054;」

は、それを解決するために、とにかくあり


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(); 
} 

答えて

0

ユーザーXMLOutputFactory.createXMLEventWriter(stream, "UTF-8")あなたは作家を作成しているとき、私はこれがあなたの問題を解決しなければならないと考えている

私は持っていません?。。この特定のAPIを使用しましたが、他の多くのものを使用しました。たとえば、エンコーディングが文字をサポートしない場合、エスケープはProperties.store()メソッドによって自動的に行われます。

+0

申し訳ありません、上記のコメントは正しくありません!私はまずstatckoverflow.comを使用しています。私はJavaソースを追加します。 – btpka3

+0

あなたの例は、私が言ったことを正確に確認します。 UTF-8を使用していて、他の文字セットを使用しているときにエンコードされている場合は、すべてのUnicode文字がうまく印刷されます。だから何が問題なの? – AlexR

+0

「UTF-8」を使用すると~~~~しかし、一般に、XMLが "GBK"でエンコードされていると、なぜ中国語の文字がエスケープされますか?お客様が「GBK」の使用を主張している場合は、技術的に修正できますか? – btpka3

関連する問題