Парсинг саксофона и кодирование

У меня есть контакт, который испытывает проблему с SAX при парсинге файлов Atom и RSS. По его словам, это - как будто текст, прибывающий из элементов Объекта, является усеченным в апострофе или иногда символе с диакритикой. Кажется, существует проблема с кодированием также.

Я дал SAX попытку, и я имею некоторое усечение, происходящее также, но не смог вырыть далее. Я ценил бы некоторые предложения, если кто-то там занялся этим прежде.

Это - код, это используется в ContentHandler:

public void characters( char[], int start, int end ) throws SAXException {
//
    link = new String(ch, start, end);

Править: Проблема кодирования могла бы произойти из-за того, чтобы хранить информацию в массиве байтов, поскольку я знаю работы Java в Unicode.

6
задан Dan Lowe 6 May 2017 в 16:02
поделиться

3 ответа

. Не гарантируется, что метод characters () предоставит вам полное символьное содержимое текстового элемента за один проход - полный текст может занимать буфер границы. Вам необходимо самостоятельно буферизовать символы между событиями начального и конечного элемента.

например

StringBuilder builder;

public void startElement(String uri, String localName, String qName, Attributes atts) {
   builder = new StringBuilder();
}

public void characters(char[] ch, int start, int length) {
   builder.append(ch,start,length);
}

public void endElement(String uri, String localName, String qName) {
  String theFullText = builder.toString();
}
13
ответ дан 8 December 2019 в 12:20
поделиться

Как вы передаете ввод в SAX? Как InputStream (рекомендуется) или Reader? Итак, начиная с вашего байта [], попробуйте использовать ByteArrayInputStream .

1
ответ дан 8 December 2019 в 12:20
поделиться

Сущности XML генерируют специальные события в SAX. Вы можете поймать их с помощью LexicalHandler , хотя обычно в этом нет необходимости. Но это объясняет , почему нельзя предположить, что вы получите только одно символов событие на тег. Используйте буфер, как описано в других ответах.

Например, hello & amp; world сгенерирует последовательность

  • startElement
  • символов hello
  • startEntity
  • символов &
  • endEntity
  • characters world

Если вам нужны другие примеры, посмотрите Вспомогательный интерфейс SAX . Другие особые события - внешние сущности, комментарии, CDATA и т. Д.

5
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: