将charset名称转换为NSStringEncoding

时间:2010-05-23 10:18:56

标签: objective-c cocoa encoding character-encoding

给定一个charset字符串,例如“utf-8”,“iso-8859-1”,“us-ascii”等,是否有任何内置方法可以在Cocoa中获取相应的NSStringEncoding?

现在我正在考虑构建一个包含映射到NSStringEncoding的名称的规范化版本的NSDictionary,然后使用查找机制以相同的方式规范化输入。但是,如果给出字符串“UTF-8”等,真的没办法获得NSUTF8StringEncoding吗?

3 个答案:

答案 0 :(得分:22)

你必须通过CoreFoundation。

CFStringConvertIANACharSetNameToEncoding
CFStringConvertEncodingToNSStringEncoding

首先将IANA字符集转换为CFStringEncoding值(与NSStringEncoding不同),然后将CFStringEncoding转换为NSStringEncoding。

NSString *encodingString = @"utf-8"
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef) encodingString));

答案 1 :(得分:2)

NSStringEncoding utfEncoding = NSUTF8StringEncoding;
NSLog(@"%lu",utfEncoding);

NSString * utf8Name = @"UTF-8";
CFStringEncoding aEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)utf8Name);
utfEncoding = CFStringConvertEncodingToNSStringEncoding(aEncoding);
NSLog(@"%lu",utfEncoding);  

答案 2 :(得分:1)

我认为没有任何内置的方法来实现这一目标。我认为你的建议 - 用价值观建立一本字典 - 是一种明智的方式。没有那么多的编码所以它应该是非常微不足道的,并且可能比试图找到一种内置的方法更快。