2009-10-28 6 views
13

Java org.w3c.dom.lsのドキュメントを読むと、要素としてのみ見えるように、Javaネイティブ文字列エンコーディングUTF-16でStringにシリアル化できます。私はUTF-8文字列を作成する必要がありますが、エスケープされているかどうかは分かりませんが、UTF-16文字列になります。誰でもこれを回避する考えがありますか? Stringを消費する生成されたWSクライアントに渡す文字列が必要です。次に、UTF-8にする必要があります。DOMImplementationLSは、JavaのUTF-8でStringにシリアル化します。

私は、文字列を作成するために使用するコードは:

Node node = ... 
    StringWriter output = new StringWriter(); 

    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.transform(new DOMSource(node), new StreamResult(output)); 

    String xml = output.toString(); 

それは特にありません。

DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry. 
DOMImplementationLS domImplementationLS = (DOMImplementationLS) REGISTRY.getDOMImplementation("LS"); 
LSSerializer writer = domImplementationLS.createLSSerializer(); 
String result = writer.writeToString(element); 
+1

@Tomas - UTF-8 JavaのStringのようなものはありません。私は、UTF-8でエンコードされたバイトをchar型に強制して涙を浮かべようとする試みを期待しています。 – McDowell

答えて

7

私は文字列にDOMをシリアライズする最も柔軟な方法はjavax.xml.transform APIを使用することを見つけますエレガントですが、出力エンコーディングをよりよく制御する必要があります。

+0

は魅力として機能しますが、エンコードを明示的に設定するには、これは設定なしでUTF-8を生成しますか? – Tomas

+0

これは、あなたが使用する 'Writer'実装までです。 'StringWriter'はデフォルトでUTF-8になります。 – skaffman

+1

@skaffman - "StringWriterはデフォルトでUTF-8になりました"。あなたは間違っています。 StringはUTF-16です。トランスフォーマーは '<?xml version =" 1.0 "encoding =" UTF-8 "?>'というXMLヘッダーを追加することがありますが、これは実際のエンコーディング操作とは関係ありません。 – McDowell

13

あなたはまだDOMImplementationLSを使用することができます。

DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry. 
DOMImplementationLS domImplementationLS = (DOMImplementationLS)REGISTRY.getDOMImplementation("LS"); 
LSOutput lsOutput = domImplementationLS.createLSOutput(); 
lsOutput.setEncoding("UTF-8"); 
Writer stringWriter = new StringWriter(); 
lsOutput.setCharacterStream(stringWriter); 
lsSerializer.write(doc, lsOutput);  
String result = stringWriter.toString(); 
関連する問題