2014-03-06 69 views
1

我有一個UTF-8編碼的XML文件(XMLSpy和NotePad ++都顯示爲編碼)。該文件包含韓文字符串,這兩個編輯器都可以正常顯示。Groovy - 用XML解析韓語的編碼問題

<Table> 
    <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="290.25"/> 
    <Row ss:AutoFitHeight="0"> 
     <Cell> 
      <Data ss:Type="String">왕복</Data> 
     </Cell> 
    </Row> 
    <Row ss:AutoFitHeight="0"> 
     <Cell> 
      <Data ss:Type="String">..에서</Data> 
     </Cell> 
    </Row> 
    <Row ss:AutoFitHeight="0"> 
     <Cell> 
      <Data ss:Type="String">편도</Data> 
     </Cell> 
    </Row> 
    <Row ss:AutoFitHeight="0"> 
     <Cell> 
      <Data ss:Type="String">기내</Data> 
     </Cell> 
    </Row> 
</Table> 

我正在使用Groovy來解析XML文件並將內容寫入新的XML文件。

 XmlParser parser = new XmlParser(); 
     def inputSource = new InputSource(new FileReader(file)); 
     inputSource.setEncoding('UTF-8'); 

     def workbook = parser.parse(inputSource); 

然後我寫出了一個新的XML文件,指定UTF-8,即使我不認爲這是應該需要的。

 def finalFileWriter = new FileWriter(new File(file.getName()+"_clean.xml").asWritable('UTF-8')); 
     def printer = new XmlNodePrinter(new PrintWriter(finalFileWriter)); 
     printer.preserveWhitespace = true; 
     printer.print(workbook); 

生成的XML文件,根據XMLSpy的,所包含的字符,不應該使用UTF-8存在於一個文件,並因此得到與垃圾取代。它們也在Notepad ++中顯示不正確。兩位編輯都說新文件是UTF-8編碼的。

上面的代碼在其他3個身份結構的文件(簡體中文,繁體中文和日文)上運行時工作得非常好。任何指導都很棒。

感謝

+0

你有一些示例輸入嗎? –

+0

感謝您將XML放入原始文章:) – Shigsy

回答

0

這似乎爲我工作,如果我把你的XML輸入到/tmp/input.xml

def workbook = new XmlParser(false, false).parse('/tmp/input.xml') 

new File('/tmp/test.xml').withWriter('UTF-8') { w -> 
    new XmlNodePrinter(new PrintWriter(w)).with { p -> 
     preserveWhitespace = true 
     p.print(workbook) 
    } 
} 

我要告訴解析器忽略的命名空間,你不指定ss:命名空間是什麼是。

但是/tmp/test.xml的輸出看起來不錯?

+0

我會給這個添Tim併發回。感謝您關注此事,無論結果如何 – Shigsy

+0

酷,手指交叉:-) –

+0

蒂姆...你很棒:D很好,非常感謝。更重要的是,爲什麼? :)你知道爲什麼你解析文件和打印它的工作方式,但地雷遇到人品問題嗎?我會看看groovy API,看看它和Writer()和PrintWriter()說的是什麼,因爲它們是我們兩種方法之間的差異(再加上您對我使用了不同的XMLParser構造函數)。我比編碼者更像一名Groovy黑客,所以仍然需要做更多的閱讀。 – Shigsy