0

質問の主題が複雑に見えても、問題は非常に単純です。

次のスクリプトを使用して XML ファイルを作成します。

def xmlFile = new File("file-${System.currentTimeMillis()}.xml")
mb = new groovy.xml.StreamingMarkupBuilder()
mb.encoding = "UTF-8"
new FileWriter(xmlFile) << mb.bind {
    mkp.xmlDeclaration()
    out << "\n"
    someMarkup {}
}

次に、次のようなコードを使用してこのファイルを解析すると:

def xml = new XmlSlurper().parse(xmlFile)

次のMalformedByteSequenceException例外が発生しました。

スローされた例外: 3 バイト UTF-8 シーケンスの無効なバイト 2

そして、ファイルを UTF-8 形式 (たとえば、Notepad++ を使用) に変換すると、すべて問題ありません。

では、ファイルを UTF-8 形式で保存するにはどうすればよいでしょうか? コードmb.encoding = "UTF-8"がそれをしないのはなぜですか?

どうも

4

1 に答える 1

2

出力ストリーム ライターを FileOutputStream にラップする必要があります。utf-8 はデフォルトの文字セットではありません。

new OutputStreamWriter(new FileOutputStream(exportXmlFile),'utf-8') << mb.bind {
    mkp.xmlDeclaration()
    out << "\n"
    someMarkup {}
}

mb.encoding の設定が何を行うのかわかりません。おそらく xml ヘッダーに文字セットを設定するだけです

于 2009-10-07T00:17:04.283 に答える