Более элегантный способ декодирования \ u0000 Unicode во входном потоке

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

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

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

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

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

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

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

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

Intereting Posts