2013-04-25 3 views
1

Я использую StAX для чтения XML-файла, но проблема с такими символами, как žćčšđ. Код почти такой же, как в SAX, но у меня не было такой проблемы.кодировка в Java StAX парсер

это часть XML-документа

<?xml version = "1.0" encoding="UTF-8" ?>  
<Autor> 
     <Id>1</Id> 
     <Meno>Jano Žiška</Meno> 
     <Email>[email protected]</Email> 
     <tel_cislo typ="mobil">0944564685</tel_cislo> 
     <plat>500</plat> 
     </Autor> 

ява

 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? благодаря

ответ

3

Если у Вас нет действительно хорошая причина, вы всегда должны использовать двоичные потоки с XML (InputStream/OutputStream), а не потоки символов (чтения/записи). использование символьных потоков может привести к повреждению xml (как показывает исходный код OP).

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

Вместо использования FileReader, сделайте следующее:

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

спасибо, но я не понимаю, почему это отличается от SAX. Я думаю, что-то в api .. – ivanz

+2

На самом деле, вы не должны использовать Reader вообще, вы должны использовать InputStream напрямую. – jtahlborn