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
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
对于常用的编码方式可以简单这样写:
NSString *text =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
可以按住Command键点击NSStringEncoding, 切换到定义处查看
enum {
NSASCIIStringEncoding = , /* 0..127 only */
NSNEXTSTEPStringEncoding = ,
NSJapaneseEUCStringEncoding = ,
NSUTF8StringEncoding = ,
NSISOLatin1StringEncoding = ,
NSSymbolStringEncoding = ,
NSNonLossyASCIIStringEncoding = ,
NSShiftJISStringEncoding = , /* kCFStringEncodingDOSJapanese */
NSISOLatin2StringEncoding = ,
NSUnicodeStringEncoding = ,
NSWindowsCP1251StringEncoding = , /* Cyrillic; same as AdobeStandardCyrillic */
NSWindowsCP1252StringEncoding = , /* WinLatin1 */
NSWindowsCP1253StringEncoding = , /* Greek */
NSWindowsCP1254StringEncoding = , /* Turkish */
NSWindowsCP1250StringEncoding = , /* WinLatin2 */
NSISO2022JPStringEncoding = , /* ISO 2022 Japanese encoding for e-mail */
NSMacOSRomanStringEncoding = , NSUTF16StringEncoding = NSUnicodeStringEncoding, /* An alias for NSUnicodeStringEncoding */ NSUTF16BigEndianStringEncoding = 0x90000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */
NSUTF16LittleEndianStringEncoding = 0x94000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ NSUTF32StringEncoding = 0x8c000100,
NSUTF32BigEndianStringEncoding = 0x98000100, /* NSUTF32StringEncoding encoding with explicit endianness specified */
NSUTF32LittleEndianStringEncoding = 0x9c000100 /* NSUTF32StringEncoding encoding with explicit endianness specified */
};
typedef NSUInteger NSStringEncoding;
对于不常用的编码方式,需要这样用:
NSStringEncoding encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *text = [[NSString alloc] initWithData:data encoding:encode];
枚举CFStringEncodings中定义了很多编码方式。简体中文相关的是这三个
kCFStringEncodingGB_2312_80 = 0x0630,
kCFStringEncodingGBK_95 = 0x0631, /* annex to GB 13000-93; for Windows 95 */
kCFStringEncodingGB_18030_2000 = 0x0632,