IOS字符编码
字符编码经常能听到的有Unicode、UTF-8、GBK、GB2312、GB18030、BIG5等。这些编码方式都有什么区别呢?
其实这些编码,大体分两类:全球统一编码和各过个语种的独立编码
1.全球统一编码
Unicode是典型的全球统一编码。不管在那个国家,同一个字的unicode字符都是一样的。常用的unicode字符为2个字节,也有4个字节编码。
UTF8是unicode的一种编码方式。对应2字节的unicode,utf8为1字节(英文)或3字节(中文)。实际情况比这复杂,这里只说明常用情况
2.各国独立编码
GBK、GB2312、GB18030都是简体中文的编码。GB2312是GBK的子集,GBK是GB18030的子集。
BIG5是台湾使用的繁体中文编码。
其他非英文国家也有自己的编码,例如日语和韩语。
3. IOS中的应用
ios中可以将NSData做为参数,用来初始化NSString
1 - (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
对于常用的编码方式可以简单这样写:
1 NSString *text =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
可以按住Command键点击NSStringEncoding, 切换到定义处查看
1 enum { 2 NSASCIIStringEncoding = 1, /* 0..127 only */ 3 NSNEXTSTEPStringEncoding = 2, 4 NSJapaneseEUCStringEncoding = 3, 5 NSUTF8StringEncoding = 4, 6 NSISOLatin1StringEncoding = 5, 7 NSSymbolStringEncoding = 6, 8 NSNonLossyASCIIStringEncoding = 7, 9 NSShiftJISStringEncoding = 8, /* kCFStringEncodingDOSJapanese */ 10 NSISOLatin2StringEncoding = 9, 11 NSUnicodeStringEncoding = 10, 12 NSWindowsCP1251StringEncoding = 11, /* Cyrillic; same as AdobeStandardCyrillic */ 13 NSWindowsCP1252StringEncoding = 12, /* WinLatin1 */ 14 NSWindowsCP1253StringEncoding = 13, /* Greek */ 15 NSWindowsCP1254StringEncoding = 14, /* Turkish */ 16 NSWindowsCP1250StringEncoding = 15, /* WinLatin2 */ 17 NSISO2022JPStringEncoding = 21, /* ISO 2022 Japanese encoding for e-mail */ 18 NSMacOSRomanStringEncoding = 30, 19 20 NSUTF16StringEncoding = NSUnicodeStringEncoding, /* An alias for NSUnicodeStringEncoding */ 21 22 NSUTF16BigEndianStringEncoding = 0x90000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ 23 NSUTF16LittleEndianStringEncoding = 0x94000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ 24 25 NSUTF32StringEncoding = 0x8c000100, 26 NSUTF32BigEndianStringEncoding = 0x98000100, /* NSUTF32StringEncoding encoding with explicit endianness specified */ 27 NSUTF32LittleEndianStringEncoding = 0x9c000100 /* NSUTF32StringEncoding encoding with explicit endianness specified */ 28 }; 29 typedef NSUInteger NSStringEncoding;
对于不常用的编码方式,需要这样用:
1 NSStringEncoding encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); 2 NSString *text = [[NSString alloc] initWithData:data encoding:encode];
枚举CFStringEncodings中定义了很多编码方式。简体中文相关的是这三个
1 kCFStringEncodingGB_2312_80 = 0x0630, 2 kCFStringEncodingGBK_95 = 0x0631, /* annex to GB 13000-93; for Windows 95 */ 3 kCFStringEncodingGB_18030_2000 = 0x0632,