2011-06-01 49 views
2

XML我通過閱讀文本形式.txt文件生成XML。但我得到了奇怪的性格結果。我想在xml中看到我的文本與在.txt文件中顯示的相同。奇怪字符結果通過java代碼

這裏爲txt文件我的文字

澤納
muškarac
devojčica
dečak
AUTOMOBIL
AUTOBUS
DRVO
kuća
亞飛
MACKA
PAS
cvet

,這裏是我的XML奇怪的結果。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<resources> 
    <string name="0s0">žena</string> 
    <string name="1s1">muškarac</string> 
    <string name="2s2">devoj�ica</string> 
    <string name="3s3">de�ak</string> 
    <string name="4s4">automobil</string> 
    <string name="5s5">autobus</string> 
    <string name="6s6">drvo</string> 
    <string name="7s7">kuća</string> 
    <string name="8s8">avion</string> 
    <string name="9s9">ma�ka</string> 

這是我的代碼。

  FileInputStream fstream = new FileInputStream("D:/12.txt"); // Path of input text file 
      BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
      String strLine; 

      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

      //root elements 
      Document doc = docBuilder.newDocument(); 
      Element rootElement = doc.createElement("resources"); 
      doc.appendChild(rootElement); 

      int i = 0; 
      String attrName; 
      //Read File Line By Line 
      while ((strLine = br.readLine()) != null) { 

       attrName = i+"s"+i; 
       i++; 

       //staff elements 
       Element string = doc.createElement("string"); 
       rootElement.appendChild(string); 

       //set attribute to staff element 
       Attr attr = doc.createAttribute("name"); 
       attr.setValue(attrName); 
       string.setAttributeNode(attr); 
       string.appendChild(doc.createTextNode(strLine)); 

      } 
      //Close the input stream 
      in.close(); 

      //write the content into xml file 
      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer = transformerFactory.newTransformer(); 
      DOMSource source = new DOMSource(doc); 
      StreamResult result = new StreamResult(new File("D:\\italian.xml")); // Path of output text file 
      transformer.transform(source, result); 

      System.out.println("Done");   

我研究了很多帖子都在這裏,但我不能讓我的願望的解決方案。只是我想在xml文件中看到與.txt文件中顯示的相同的文字記錄器/文本。

+1

您需要標記您的XML源代碼以使它們顯示出來。只需選擇它並按下'{}'符號(注意這次他已經爲您完成了)。 – 2011-06-01 14:04:12

+0

請注意,在此代碼中不需要創建'DataInputStream' - 您可以直接將'FileInputStream'實例傳遞給'InputStreamReader'。 – McDowell 2011-06-01 14:04:26

+0

@Joachim:謝謝。 @McDowell:非常感謝你,是的你是對的, – Khokhar 2011-06-01 16:49:52

回答

4

您需要使用InputStreamReader時提供正確的字符集/編碼。試試這個:

... new InputStreamReader(in, "UTF-8"); 
+0

謝謝蒂姆, 問題已經解決了你的方式..InputStreamReader isr = new InputStreamReader(fis,「UTF-8」); – Khokhar 2011-06-01 16:30:07

+0

@Khokhar:太好了。您可能希望通過點擊旁邊的複選標記來正確接受此答案。 – 2011-06-06 09:04:06

1

嘗試設置InputStreamReader中的編碼,例如

new InputStreamReader(in, "UTF-8"); 

如果這不起作用,揣摩其編碼的文件使用。

+0

由於T輔助細胞, – Khokhar 2011-06-01 16:46:08

1

你有兩個問題。

  1. 你不知道你的編碼的.txt 文件中,你需要用正確的編碼,可能是UTF-8讀取它 。當您 僅使用new InputStreamReader() 而未指定編碼時,java 將使用平臺默認的 編碼,這相當於使用隨機編碼的 。

  2. 的XML文件中存儲有編碼UTF-8這是缺省值。 如果你想在文本編輯器中閱讀它,你需要一個支持UTF-8的編輯器 。

+0

謝謝, 這個問題已經通過 'InputStreamReader的ISR =新的InputStreamReader解決(FIS, 「UTF-8」); ' 和 '//寫的內容轉換爲XML文件 \t \t \t的TransformerFactory的TransformerFactory = TransformerFactory.newInstance(); \t \t \t變壓器transformer = transformerFactory.newTransformer(); \t \t \t transformer.setOutputProperty(OutputKeys.ENCODING,「ISO-8859-1」); \t \t \t DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File(「D:/myfile.xml」)); \t \t \t transformer.transform(source,result); ' – Khokhar 2011-06-01 16:36:44