带日本字符的NSString

时间:2013-11-25 10:42:58

标签: ios iphone objective-c

在我的应用程序中,我有NSString从网络获取字符串:

高瀬 - 虎柄の毘沙門天

现在我想将此字符串复制到我的Object中的本地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);

1 个答案:

答案 0 :(得分:2)

此行不适用于多字节字符:

[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];

如果使用其他编码(例如NSJapaneseEUCStringEncodingNSShiftJISStringEncoding):

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