2010-05-23 91 views
12

給定一個字符串字符串,例如「utf-8」,「iso-8859-1」,「us-ascii」等等,是否有任何內置方式可以在Cocoa中獲得合適的NSStringEncoding ?將字符集名稱轉換爲NSStringEncoding

現在,我正在研究構建一個NSDictionary,其中包含映射到NSStringEncoding的名稱的規範化版本,然後以相同方式對輸入進行規範化處理。但是真的沒有辦法得到NSUTF8StringEncoding給定的字符串「UTF-8」等?

回答

21

你必須經過CoreFoundation。

CFStringConvertIANACharSetNameToEncoding 
CFStringConvertEncodingToNSStringEncoding 

首先轉換IANA字符設置爲CFStringEncoding值(這是不一樣的NSStringEncoding),然後將CFStringEncoding轉換爲NSStringEncoding。

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

謝謝,這似乎像它應該做的伎倆。 – d11wtq 2010-05-23 13:35:21

1

我不認爲有任何內置的方式來實現這一點。我認爲你的建議 - 建立一個有價值的字典 - 是一個明智的方式去這裏。沒有那麼多的編碼,所以它應該是相當微不足道的,並且可能比試圖找到一種內置的方式更快。

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

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