Проблема с кодировкой юникода NSString

У меня проблемы с преобразованием строки во что-то читаемое. я использую

NSString *substring = [NSString stringWithUTF8String:[symbol.data cStringUsingEncoding:NSUTF8StringEncoding]];

но я не могу преобразовать \U7ab6\U51b1 в '

Он отображается как 窶冱, чего я не хочу, он должен отображаться как «. Может кто-нибудь помочь мне?


person munchine    schedule 27.03.2011    source источник
comment
? Символ U+7AB6 — это 窶, а U+51B1 — определенно 冱. Как эта последовательность когда-либо представляла бы апостроф?   -  person bobince    schedule 27.03.2011
comment
привет Бобин, это не апостроф, но похоже. Я вставил его сюда из документа Word, первый — это апостроф «он показан как» и создан комбинацией \U7ab6\U51b1. Я просто хочу, чтобы это отображалось как ’   -  person munchine    schedule 28.03.2011


Ответы (1)


это показано как ’

Это символ U+2019 ПРАВАЯ ОДИНАРНАЯ КАвычка.

Случилось так, что вам была отправлена ​​последовательность символов ’s в кодировке UTF-8, которая выходит в виде байтов:

’          s
E2 80 99   73

Затем эта последовательность байтов была неправильно интерпретирована, как если бы она была закодирована в кодовой странице Windows 932 (японский; более или менее Shift-JIS):

E2 80    99 73
窶        冱

Таким образом, в этом конкретном случае вы можете восстановить строку ’s, сначала кодируя символы в байты cp932, а затем декодируя эти байты обратно в символы, используя UTF-8.

Однако это не решит вашу настоящую проблему, заключающуюся в том, что строки изначально были прочитаны неправильно. В этом случае вы получили 窶冱, потому что последовательность байтов UTF-8, полученная в результате кодирования ’s, также оказалась допустимой последовательностью байтов Shift-JIS. Но это не относится ко всем возможным последовательностям байтов UTF-8, которые вы можете получить. Многие другие персонажи будут безвозвратно искалечены.

Вам нужно найти, где байты считываются в систему и декодируются как Shift-JIS, и исправить это, чтобы вместо этого использовать UTF-8.

person bobince    schedule 27.03.2011