2011-08-09 6 views
0

こんにちは、私は単純なコードがあります。のXml変換エンコードの問題

InputSource is = new InputSource(new StringReader(xml)) 
    Document d = documentBuilder.parse(is) 
    StringWriter result = new StringWriter() 
    DOMSource ds = new DOMSource(d) 
    Transformer t = TransformerFactory.newInstance().newTransformer() 
    t.setOutputProperty(OutputKeys.INDENT, "yes"); 
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
    t.setOutputProperty(OutputKeys.STANDALONE, "yes"); 
    t.setOutputProperty(OutputKeys.ENCODING,"UTF-16") 
    t.transform(ds,new StreamResult(result)) 
    return result.toString() 

UTF-16エンコーディングにXMLをtrasnform必要があります。私が知る限り、jvmのStringの内部表現はすでにUTF-16文字を使用していますが、結果の文字列にはエンコーディングが "UTF-16"に設定されているヘッダーが含まれている必要があります。しかし、私が手:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

は(また、スタンドアロンのプロパティが間違っているようだ) トランスインスタンスは次のとおりです。com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl (私はと思われるもの既定値) ここで私が恋しいのは?

+0

結局問題を解決できましたか?私は今、1つのアプリでも問題にぶつかりました。本当にうそつき。私はソースを確認しました。 'encoding'の値は単に渡されません(http://www.grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/com/sun/org/apache/)。 xalan/internal/xsltc/trax/TransformerImpl.java#TransformerImpl.transform%28javax.xml.transform.Source%2Ccom.sun.org.apache.xml.internal.serializer.SerializationHandler%2Cjava.lang.String%29)をトランスレット。 –

答えて

1

出力エンコードとしてUTF-16を明示的に宣言するライターを使用します。 ByteArrayOutputStreamをラップし、これが動作するかどうか確認するOutputStreamWriter(OutputStream out, String charsetName)を試してください。

+0

xmlのエンコーディング属性を変更する理由は何ですか?私が望むのはトランスフォーマーを使ってxmlのヘッダーのエンコーディングを変更することです(動作しません) – csviri

+0

トランスは明示的なエンコーディングを認識している可能性があるので、 –

+0

はい、しかし、私はそれを試して、動作しませんでした:( – csviri

0

私は今自分でテストを書いています。 1つのマイナーチェンジで:

t.transform(ds,new StreamResult(new File("dest.xml"))); 

私は、ファイルが実際にUTF-16でエンコードされているのと同じ結果が、を持って、バイナリエディタで確認。いくつかの奇妙な理由で、XML宣言は変更されません。だからあなたのコードが動作します。

+0

私の質問は、この '奇妙な理由'についての問題でしたエンコーディングは変更されていません(それも私の作品)、しかし、XML宣言は – csviri

+0

これはややPITAです。私はXalanに確認し、メーリングリストに書き込みます。 –