我正在开发一个 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 都无法正确显示。它们变成乱码、空格或其他语言(如韩语或泰语字符),但它们永远不会以日语显示。
我尝试过的编码是(还有更多,我尝试了很多编码):
- NSASCIIStringEncoding:7ビトASCIIエンコード
- NSNEXTSTEPStringEncoding
- NS JapaneseEUCStringEncoding<日本语EUC
- NSUTF8StringEncoding:8bittoUnicode(UTF8)エンコード
- NISOLatin1StringEncodingISOラテン1エンコード
- NISOLatin2StringEncodingISOラテン2エンコード
- NSSymbolStringEncodingShinboruenkodo
- NSNonLossyASCIIStringEncoding无损失し7ビトASCIIエンコード
- NSShiftJISStringEncoding:shifutoJIS
- NSUnicodeStringEncoding
- NSWindowsCP1251StringEncoding阿多比苏坦达多西里尔文
- NSWindowsCP1252StringEncoding
- NSWindowsCP1253StringEncoding希腊语
- NSWindowsCP1254StringEncoding土耳其语
- NSWindowsCP1250StringEncodingWinラテン1
- NSISO2022JPStringEncoding(ISO2022日本语エンコード(电子メールなど)
- NSMacOSRomanStringEncodingMacRoman
- NSProprietaryStringEncoding
我真的需要这方面的帮助,我已经在网上搜索了几天但没有成功......请帮助......
最佳答案
这些都是 NSStringEncoding,因此您的代码不正确。例如,您想要:
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 位数量的两个字节加载到内存中,所以您的代码实际上不是字节序中立的。所以要注意这一点。
关于ios - 在iOS应用程序开发中,我需要显示一些日语字符,它是2个字节,但我找不到正确的编码来使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5214897/