NSString проблема кодирования юникода - PullRequest
0 голосов
/ 27 марта 2011

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

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

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

. Это отображается как 窶 冱, что мне не нужно, должно отображаться как,Кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 28 марта 2011

это отображается как '

Это символ U + 2019 ПРАВИЛЬНАЯ ОДНОКВАЖНАЯ МАРКА.* передано вам в кодировке 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.

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