2012-02-29 3 views
1

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

í it should be í 
é it should be é 

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

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

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

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

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

+0

Кажется, что-то связано с кодировкой символов. Не могли бы вы подтвердить, какую кодировку вы используете? – kosa

+0

Я использую UTF-8, это должно быть что-то еще, поскольку UTF-8 является кодировкой символов по умолчанию для xmlpullparser – butelo

+0

, если эта ссылка помогает http: // stackoverflow.com/questions/5976375/xmlpullparser-on-special-characters кажется, что ISO-8859-1 работал на этого парня, но не уверен. Попробуй. – kosa

ответ

0

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

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

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

1

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

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

    String content = File to string; 
    

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

  1. Импорт Обще-lang3-3.1.jar к вашему проекту от Apache Commons. Поток этой строки для экранирования в Html символов:

    String output = StringEscapeUtils.unescapeHtml4(content); 
    
  2. поток, который Unescaped строку к вашему XmlPullParser:

    xpp.setInput(new StringReader (output)); 
    

И это все.

0

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

+0

Я пробовал это и не работал. Может быть, я могу удалить ненужные методы из библиотеки apache и сделать его более тонким – butelo

Смежные вопросы