Более элегантный способ декодирования Unicode во входном потоке - PullRequest
3 голосов
/ 09 июля 2010

Я анализирую поток ввода с Facebook. Я использую что-то вроде

BufferedReader in =
    new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

А затем in.readLine для фактического чтения из потока.

Похоже, что в потоке уже есть символы Юникода, уже закодированные в ASCII, поэтому я вижу такие вещи, как \ u00e4 (при этом \ u фактически является двумя дискретными символами ASCII). Прямо сейчас я ловлю «\ u» и декодирую последующие два шестнадцатеричных байта, превращаю их в символ и заменяю их строкой, что, очевидно, является худшим способом сделать это.

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

Ответы [ 2 ]

5 голосов
/ 19 октября 2010

Формат данных - JSON, который я не упомянул (и который Танатос уже предполагал). Использование JSON-анализатора Android автоматически декодирует символы должным образом. Разбор JSON сам по себе, очевидно, глупая идея на нескольких уровнях.

2 голосов
/ 09 июля 2010

Если вы видите '\u00e4', где '\' и 'u' разделены, то '0', '0', 'e' и '4 ', вероятно, составляют 4 шестнадцатеричные цифры двухбайтового (16-битного) символа Unicode. Обозначение основано на C99; альтернативой является '\U00XXYYZZ', где есть 8 шестнадцатеричных цифр, представляющих 32-битный символ UTF-32 (но, поскольку Unicode является 21-битным кодовым набором, первые 2 из 8 цифр всегда равны 0, а следующие часто (обычно) тоже 0).

Однако это не отвечает на ваш вопрос о том, какой правильный способ чтения данных для Android есть, и вы правы, что, вероятно, есть один.

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