我正在开发一个iOS应用程序,我遇到了日文编码问题。
日语字符流从远程服务器发送到应用程序,每个字符都有两个字节(包括平假名,片假名和汉字)。
以下是代码:
uint8_t bytes[2];
bytes[0] = firstByte; // First byte of the Japanese character
bytes[1] = secondByte; // second byte,
NSMutableData* data = [[NSMutableData alloc] init];
[data appendBytes:bytes length:2];
UInt32 encoding = CFStringConvertEncodingToNSStringEncoding(someJapaneseEncoding); // need to find a correct encoding to use
NSString* str = [[NSString alloc] initWithData:data encoding:encoding];
然后代码将* str打印到屏幕并在手机上绘图,但问题是,无论我使用什么编码,str都无法正确显示。它们变成乱码,空间或其他语言,如韩语或泰语字符,但它们永远不会用日语显示。
我试过的编码是(还有更多,我尝试了很多编码):
我真的需要帮助,我在网上搜索了几天但没有运气......请帮忙......
答案 0 :(得分:1)
这些都是NSStringEncodings,因此您的代码不正确。你想要,例如:
uint8_t bytes[2];
bytes[0] = firstByte; // First byte of the Japanese character
bytes[1] = secondByte; // second byte,
NSMutableData* data = [[NSMutableData alloc] init];
[data appendBytes:bytes length:2];
NSString* str = [[NSString alloc] initWithData:data
encoding:NSUTF16StringEncoding];
即。没有调用CFStringConvertEncodingToNSStringEncoding,因为你没有以CFStringEncoding开头。
实际上,如果iPhone支持你的神秘编码,我希望它是NSUTF16StringEncoding,或显式NSUTF16BigEndianStringEncoding或NSUTF16LittleEndianStringEncoding,因为它们是唯一的双字节类型。
因为您以固定顺序将16位数量的两个字节加载到内存中,所以您的代码实际上并不是字节中性的。所以注意这一点。