2010-05-23 13 views
12

Gegeben eine Zeichenkette wie "UTF-8", "ISO-8859-1", "Us-ASCII" usw., gibt es eine integrierte Möglichkeit, die entsprechende NSStringEncoding in Cocoa zu erhalten ?Konvertieren Zeichensatzname in NSStringEncoding

Momentan suche ich nur ein NSDictionary zu erstellen, das eine kanonische Version des Namens enthält, der der NSStringEncoding zugeordnet ist, und dann einen Lookup-Mechanismus hat, der die Eingabe auf die gleiche Weise kanonisiert. Aber gibt es wirklich keine Möglichkeit, NSUTF8StringEncoding mit der Zeichenfolge "UTF-8" usw. zu erhalten?

Antwort

21

Sie müssen durch CoreFoundation gehen.

CFStringConvertIANACharSetNameToEncoding 
CFStringConvertEncodingToNSStringEncoding 

zuerst die IANA Char Umwandlung auf CFStringEncoding Wert (das ist nicht das gleiche wie NSStringEncoding ist) und dann die CFStringEncoding zu NSStringEncoding konvertieren.

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

Danke, das, wie es scheint, den Trick tun sollten. – d11wtq

1

Ich glaube nicht, dass es eine eingebaute Möglichkeit gibt, dies zu erreichen. Ich denke, was Sie vorschlagen - ein Wörterbuch mit den Werten zu bauen - ist ein vernünftiger Weg, hier zu gehen. Es gibt nicht so viele Kodierungen, also sollte es ziemlich trivial sein und wahrscheinlich schneller, als zu versuchen, eine eingebaute Methode zu finden.

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

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