У меня есть XMLEventReader.Он был построен из XMLInputFactory с кодировкой UTF8.Я использую его для чтения XML-файла, атрибут «encoding» которого имеет значение «UTF-8».
Я убедился, что XML-файл правильно отображается в Firefox.Когда вы просматриваете кодировку страницы, она говорит, что это UTF-8.
Я установил XMLEventReader для объединения событий символов, например:
reader.setProperty(XMLEventReader.IS_COALESCING, Boolean.TRUE);
В XML-документе нетDTD.Это допустимо.
XMLEventReader иногда будет сообщать о получении события CHARACTERS, содержимое которого (без кавычек), например:
r problems were most severe and frequent.) Did you sleep a lot more than usual nearly every night during that period?</text> Ð
Обратите внимание на наличие разметкиметка в конце образца, а также заглавная буква.Отметьте также, что предложение было обрезано;предположительно, было еще одно событие CHARACTERS, предшествующее этому, которое содержит главную часть предложения.
Почему XMLEventReader испортил синтаксический анализ?Почему символы не отображаются правильно?Почему XMLEventReader не объединяет события CHARACTERS, если это то, что происходит?Почему StAX так невероятно уродлив и непредсказуем?
Я использую XMLEventReader, предоставленный мне моей средой выполнения Java (Java 6) на Mac.
Вот пример XML, который изКонечно, я просто скопировал из моего редактора, так что кто знает, какие преобразования символов произошли в результате этого, но в любом случае:
<question id="BMHPD17">
<permittedResponseCount>1</permittedResponseCount>
<text>It’s hard for me to stay out of trouble. (Would you say this is true or false for you?)</text>
<namedAnswerSet idref="TrueFalse"></namedAnswerSet>
</question>
Обратите внимание на «умный апостроф» в строке 3.
Я читаю это, реагируя на событие CHARACTERS, сохраняя его содержимое в строке в стеке, а затем реагируя на событие END_ELEMENT с именем «question».Получив событие END_ELEMENT для вопроса, я получаю значение только что упомянутой строки и создаю Java-объект, который принимает в качестве входных данных только что упомянутую строку.
Когда я System.out.println ()В результате я получаю (иногда) фиктивное барахло, на которое я ссылался ранее.
Когда я обертываю System.out внутри PrintWriter с набором кодировки "UTF8", чтобы я не просто выводил символы в соответствии скодирование, я получаю те же результаты.