Java StAX解析器中的编码

时间:2013-04-25 18:36:34

标签: java xml encoding stax

我正在使用StAX来读取XML文件,但是对于像žćčšđ这样的字符有问题。 代码与SAX中的代码几乎相同,但我没有那样的问题。

这是xml文档的一部分

<?xml version = "1.0" encoding="UTF-8" ?>      
<Autor>
        <Id>1</Id>
        <Meno>Jano Žiška</Meno>
        <Email>dfdsfsfdsdf@gmail.com</Email>
        <tel_cislo typ="mobil">0944564685</tel_cislo>  
        <plat>500</plat>
      </Autor>

的java

        public static void main(String[] args) {
            try {
              XMLInputFactory f = XMLInputFactory.newInstance();
              XMLStreamReader r = f.createXMLStreamReader(new FileReader(SUBOR));
            }
....
          if (r.getLocalName().equals(ELEMENT_MENO) == true) {
            String v = r.getElementText();
             System.out.println("meno:\t\t\t " + v);
          }

我如何在java中指定编码? 感谢

2 个答案:

答案 0 :(得分:3)

除非你有非常好的理由,否则你应该始终使用XML(InputStream / OutputStream)的二进制流,而不是字符流(Reader / Writer)。使用字符流可能会破坏xml(正如OP的原始代码所示)。

XMLStreamReader r = f.createXMLStreamReader(new FileInputStream( SUBOR ));

答案 1 :(得分:0)

不要使用FileReader,而是执行此操作:

XMLStreamReader r = f.createXMLStreamReader(
        new InputStreamReader(
                new FileInputStream( SUBOR ),
                Charset.forName( "UTF8" ) ) );