



一、澄清
首先澄清一点:NSString
中的字符串对象本身,并不存在编码问题。所提及的编码问题,不是字符串类型本身的,而是存储时所采用的编码。如:存储成 NSData
。
最常见的:
NSString *s = @"中文abc";
NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];
[data writeToFile:@"test.txt" atomically:YES];
其中的 NSUTF8StringEncoding
是 NSStringEncoding
类型,位于 NSString.h
中。
二、NSUTF8StringEncoding
和 CFStringEncodings
NSStringEncoding
中直接包含的的编码类型并不是很全,可以使用 CFStringEncodings
中的类型,通过 CFStringConvertEncodingToNSStringEncoding
进行转换。
CFStringEncodings
在 CFStringEncodingExt.h
中。
例如:(从 NSData
中,根据编码类型,提取 NSString
)
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
retStr = [[NSString alloc] initWithData:data encoding:enc];
在提取时,如果指定的编码不匹配,会返回 nil
。也可以用这种机制做编码侦测。
(完)
网友评论