java代码中的奇怪字符结果在xml中

时间:2011-06-01 13:57:42

标签: java xml encoding utf-8

我通过阅读文本格式.txt文件来生成XML。但我得到了奇怪的角色结果。我希望看到我的文本在xml中与.txt文件中的文本相同。

这是来自.txt文件的文本

ZENA
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文件中看到相同的charecters / text,因为它们显示在.txt文件中。

3 个答案:

答案 0 :(得分:4)

使用InputStreamReader时,您需要提供正确的字符集/编码。试试这个:

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

答案 1 :(得分:1)

尝试设置inputStreamReader的编码,例如

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

如果这不起作用,请尝试确定文件使用的编码。

答案 2 :(得分:1)

你有两个问题。

  1. 你不知道你的编码是什么 .txt文件在。你需要阅读它 使用正确的编码,可能是UTF-8。当你 只需使用new InputStreamReader() 没有指定编码,java 将使用平台默认值 编码,相当于 使用随机编码。

  2. XML文件以UTF-8编码存储,这是默认值。 如果要在文本编辑器中阅读它,则需要一个编辑器 支持UTF-8。