ios - 在iOS应用程序开发中,我需要显示一些日语字符,它是2个字节,但我找不到正确的编码来使用

标签 ios unicode encoding nsstring

我正在开发一个 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日本语エンコード(电子メールなど)
  • NSMacOSRomanStringEncoding​MacRoman
  • 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/

相关文章:

ios - 在后台更新位置

ios - 创建新的 UIWindows,接管关键窗口——不好的做法?

unicode - 教 OCR 理解 NSA 和 FISC 修订

python - Dumbo(Python)/Hadoop意外输出

ios - 如何使 CLProximityImmediate 的 iBeacon 前景测距在 iOS 中更快?

iOS 10 Today 扩展程序无法再读取共享用户默认值

python - 如何在 Python 2.7 中编写 unicode csv

file - 使用 COBOL 将 Unicode 字符串写入文件

python - 如何使用python读取从网络复制到txt文件的文本

java - 基于Tomcat的java项目如何使用UTF-8编码