недостающие символы с xmlpullparser - PullRequest
2 голосов
/ 29 февраля 2012

Я анализирую какой-то файл с помощью XmlPullParser в Android. Все идет хорошо, за исключением некоторых специальных символов HTML в тексте, подобных этому:

í it should be í
é it should be é

, но они отсутствуют в извлекаемых мной строках:

camión it should be camión  and I get camin 

и то же самое с другими подобными символами.

Я не знаю точно, где проблема, если она находится в xmlpullparser.getText () или в Java String

Какя могу решить это?

Ответы [ 3 ]

1 голос
/ 01 марта 2012

Я нашел решение, но оно дорогое с точки зрения размера приложения и производительности, поэтому, пожалуйста, дайте мне знать, если что-то не так, или вы можете сделать это лучше или меньше шагов.

  1. сначала получить строку из файла. псевдокод:

     String content = File to string;
    

http://snippets.dzone.com/posts/show/1335

  1. Импортируйте commons-lang3-3.1.jar в ваш проект из Apache commons. Подайте эту строку для символов hesml unescape:

     String output =   StringEscapeUtils.unescapeHtml4(content);
    
  2. Отправьте эту неэкранированную строку в ваш XmlPullParser:

    xpp.setInput( new StringReader (output) );
    

И это все.

0 голосов
/ 24 марта 2012

Проблема в том, что обычный XML не имеет HTML-сущностей. & Eacute; не определен для XML. Вы должны либо использовать анализатор HTML (как в приведенных выше предложениях), либо сами переводить сущности в XmlPullParser.

Ваш цикл должен был бы выполняться nextToken (), а не next (); Вы должны будете ответить на XmlPullParser.ENTITY_REF

Конечно, если вы можете изменить свой входной файл для кодирования символов непосредственно в utf-8 или iso-8859-1 вместо использования сущностей HTML, это тоже сработает.

0 голосов
/ 01 марта 2012

Что касается эскейпинга HTML, кажется, что кто-то использовал Html.fromHtml, который встроен в платформу Android.Применительно к размеру приложения это может быть правильным решением;однако с точки зрения производительности вам, возможно, потребуется немного профилировать, поскольку очевидно, что эскапинг Apache Commons намного быстрее, чем встроенная альтернатива Android.

...