IOS上的字符编码

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,

 

 

 

 

 

 

posted @ 2013-08-02 10:53  matrix陈  阅读(3854)  评论(0编辑  收藏  举报