2013-11-25 3 views
0

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

高瀬 - 虎柄の毘沙門天 

Теперь я хочу, чтобы скопировать эту строку в локальную 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]]; 

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

UInt8 bytes[kAQBufSize]; 
    length = CFReadStreamRead(stream, bytes, kAQBufSize); 
+0

Как вы получаете 'tempMetaDataString' в первую очередь? Разве это уже не NSString? – cjwirth

+0

Как вы печатаете 'é« ç¬ - èæã®æ¯æ²éå¤ © '? – trojanfoe

+0

@trojanfoe Я просто вижу в режиме деаггера, что это строки – MTA

ответ

0

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

[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]; 
Смежные вопросы