Проблем с unicode кодирането на 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
здравей bobine, не е апостроф, но прилича на такъв. Поставих го тук от документ на Word, първият е апостроф ' показва се като ' и е създаден чрез комбинация от \U7ab6\U51b1. Просто искам да се показва като "   -  person munchine    schedule 28.03.2011


Отговори (1)


показва се като "

Това е символът U+2019 ДЯСНА ЕДИНИННА КАВИЧКА.

Това, което се случи, е, че сте изпратили последователността от знаци ’s в UTF-8 кодиране, която излиза като байтове:

’          s
E2 80 99   73

След това тази последователност от байтове неправилно се интерпретира така, сякаш е кодирана в кодова страница 932 на Windows (японски; повече или по-малко 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