3

Я шел по кругу по этой проблеме, где JSON UTF-8 строка, возвращаемая из сервера содержит Юникод пару, как это:Какова форма представления unicode?

\ u00c3 \ u00bc

который визуализируется как два отдельных символа. Однако он должен отображаться как один символ. Согласно таблице я нашел at this link, вот еще несколько примеров:

0xc3,0xa0 agrave 
0xc3,0xa1 aacute 
0xc3,0xa2 acircumflex 
0xc3,0xa3 atilde 
0xc3,0xa4 adiaeresis 
0xc3,0xa5 aring 
0xc3,0xa6 ae 
0xc3,0xa7 ccedilla 
0xc3,0xa8 egrave 
0xc3,0xa9 eacute 
0xc3,0xaa ecircumflex 
0xc3,0xab ediaeresis 
0xc3,0xac igrave 
0xc3,0xad iacute 
0xc3,0xae icircumflex 
0xc3,0xaf idiaeresis 
0xc3,0xb0 eth 
0xc3,0xb1 ntilde 
0xc3,0xb2 ograve 
0xc3,0xb3 oacute 

(Каждый случай, когда я вижу это в моих данных будет преобразовать в соответствующего одного символа.)

Многие из них, по-видимому являются «алиасами» синглетных форм, таких как «\ uxxxx», но я получаю их так, как дублеты. Байт необработанных данных показывает, что это фактически то, как оно передается с сервера.

(После того, как я получил их в UTF-8, нет никакой причины для меня, чтобы держать их таким образом в местном представительстве в памяти.)

Я не знаю, как назвать это, так что я m с трудом находят много информации об этом, и я не могу четко рассказать об этом. Я хотел бы знать, почему он используется и где я могу найти код, который преобразует его в то, что мой UIWebView может отображать правильно, но зная, что он называется, является точкой моего вопроса.

Мой вопрос - это то, что называется дублетом или парной формой?

(если это полезно, я работаю в Objective-C и CocoaTouch.)

ответ

4

Обозначения '\u00c3\u00bc' обозначает последовательность двух символов «Ã¼», используя обычный JavaScript побег обозначения: в строковый литерал, '\uhhhh' означает символ (или, технически, блок кода Unicode) с номером Unicode hhhh в шестнадцатеричном формате.

Это практически определенный признак ошибки преобразования символьных данных. Такие ошибки возникают часто, когда кодированные данные UTF-8 неверно интерпретируются как ISO-8859-1, закодированные (или в некоторых других 8-битных кодировках).

Вероятно, реальные, неповрежденные данные содержат и с умляут, ü, U + 00FC, для которых кодировка UTF-8 состоит из байт с3 и Ьса см http://www.fileformat.info/info/unicode/char/fc/index.htm

документа, который вы имеете в виду, http://cpansearch.perl.org/src/JANPAZ/Cstools-3.42/Cz/Cstocs/enc/utf8.enc , похоже, показывает кодированные представления символов UTF-8, представленные в текстовом формате, отображая байты как шестнадцатеричное число.

+0

Благодарим за указание кодировки UTF-8 в вашем третьем абзаце. Я должен был это узнать сам. Это очень поучительно. – Jim

5
\u00c3\u00bc 

, который визуализируется в виде двух отдельных символов.

Это явно означает два символа ü. Если вы ожидали увидеть ü, то то, что у вас есть, некорректно обрабатывается дальше по течению, либо в генераторе JSON, либо в введенном в него входе. Кто-то расшифровал серию байтов как ISO-8859-1, где они должны были использовать UTF-8.

Вы можете решить эту проблему, прочитав JSON, кодируя ISO-8859-1, а затем декодировав UTF-8. Но это приведет к какому-либо действительному правильному вводу, и на примере невозможно сказать, действительно ли «неправильная» кодировка - это ISO-8859-1 или кодовая страница Windows 1252. Также может быть.

Вам действительно нужно исправить источник проблемы, а не пытаться обойти ее. Это ваш сервер, создающий JSON? Откуда берутся данные? Потому что \u00c3\u00bc означает, что ü явно неверно.

+0

Спасибо за предложение по работе. Я могу попробовать, прежде чем я взломаю свой парсер JSON. – Jim

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