Как удалить нераспознанные символы, которые возвращаются из веб-службы? - PullRequest
3 голосов
/ 16 апреля 2010

Я работаю над приложением, которое вызывает веб-сервис отдыха. Иногда ответы xml содержат символы, которые телефон не может отобразить. При отображении этих символов вместо этого отображается пустое поле. Я хотел бы отфильтровать этих персонажей. Как я могу определить, сможет ли персонаж отображаться на экране?

Некоторые конкретные символы включают в себя:

http://www.fileformat.info/info/unicode/char/0094/index.htm http://www.fileformat.info/info/unicode/char/0080/index.htm http://www.fileformat.info/info/unicode/char/0092/index.htm

Ответы [ 3 ]

5 голосов
/ 21 апреля 2010

Android поддерживает следующие кодировки

  • Xml.Encoding ISO_8859_1
  • Xml.Encoding US_ASCII
  • Xml.Encoding UTF_16
  • Xml.Encoding UTF_8

US_ASCII не должно создавать проблем.

Для ISO_8859_1 вы должны проверить wiki для контрольных символов 0x00-0x1f и 0x7f-0x9f и их фильтрации. И, конечно, используйте соответствующий шрифт.

Использование UTF_8 или 16 более сложно, прочитайте Joels Абсолютный минимум, который должен знать каждый разработчик программного обеспечения Абсолютно, положительно, необходимо знать о Unicode и наборах символов

Вы можете найти эту рассылку список полезной.

1 голос
/ 26 апреля 2010

Прежде всего, попробуйте получить кодировку вашего устройства по умолчанию:

Charset.defaultCharset();

Затем попытайтесь получить кодировку вашего XML в псевдо-атрибуте декларации XML или в заголовке Content-Type HTTP-вызова.
Например:

<?xml version="1.0" encoding="utf-8" ?>

или

Content-Type: text/html; charset=utf-8

Если кодировка по умолчанию вашего устройства отличается от кодировки XML, вы должны обратить внимание, когда обрабатываете новые строки с помощью:

new String( bytes);

потому что, если вы забудете указать правильную кодировку, Dalvik будет использовать кодировку устройства по умолчанию с вероятными ошибками отображения.
Не забудьте использовать:

new String( bytes, encoding);
0 голосов
/ 26 апреля 2010

Похоже, я могу вызвать Character.isIdentifierIgnorable() для каждого символа и не включать его, если он игнорируется. Character.isISOControl(), вероятно, также будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...