NSString с японскими символами

В моем приложении у меня есть NSString которые получают String из Интернета:

高瀬 - 虎柄の毘沙門天

Теперь я хочу скопировать эту строку в локальную NSString в моем объекте, поэтому я написал:

self.metaDataString = [NSString stringWithString:tempMetaDataString];

И теперь в metaDataString меня есть:

é«ç¬ - èæã®æ¯æ²é天

Что может сделать эта проблема?

я тоже пробовал:

self.metaDataString = [NSString stringWithUTF8String:[tempMetaDataString UTF8String]];

Как получить tempMetaDataString:

NSMutableString *tempMetaDataString = [NSMutableString stringWithCapacity:0];
 //This line i loop over the bytes array size
 [tempMetaDataString appendFormat:@"%c", bytes[i]];

И это массив байтов:

***** bytes[kAQBufSize];
 length = CFReadStreamRead(stream, bytes, kAQBufSize);
1 ответ

Эта строка не может работать для многобайтовых символов:

[tempMetaDataString appendFormat:@"%c", bytes[i]];

Если у вас многобайтовый символ, он будет разделять его на отдельные символы ASCII (как вы видите).

Из этого кода неясно, какие bytes действительно есть. Строка фиксированной длины или строка NULL завершена? Если это фиксированная длина, то вы хотите (если это UTF8):

self.metaDataString = [[NSString alloc] initWithBytes:bytes
 length:kAQBufSize 
 encoding:NSUTF8StringEncoding];

Если это NULL-конец строки UTF8:

self.metaDataString = [NSString stringWithUTF8String:bytes];

Если некоторая другая кодировка (например, NSJapaneseEUCStringEncoding или NSShiftJISStringEncoding):

self.metaDataString = [NSString stringWithCString:bytes encoding:theEncoding];

licensed under cc by-sa 3.0 with attribution.