2010-05-23 13 views
12

Dato una stringa di caratteri, come "utf-8", "iso-8859-1", "us-ascii" ecc., Esiste un modo incorporato per ottenere il NSStringEncoding appropriato in Cocoa ?Converti il ​​nome del set di caratteri in NSStringEncoding

In questo momento sto guardando solo a costruire un NSDictionary contenente una versione canonizzata del nome mappato a NSStringEncoding, quindi con un meccanismo di ricerca che canonicalizza l'input nello stesso modo. Ma non c'è davvero alcun modo per ottenere NSUTF8StringEncoding dato la stringa "UTF-8", ecc.?

risposta

21

Devi passare attraverso CoreFoundation.

CFStringConvertIANACharSetNameToEncoding 
CFStringConvertEncodingToNSStringEncoding 

Prima convertire l'IANA Char impostata sul valore CFStringEncoding (che non è la stessa di NSStringEncoding) e poi convertire il CFStringEncoding a NSStringEncoding.

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

Grazie, che sembra che dovrebbe fare il trucco. – d11wtq

1

Non penso ci sia alcun modo integrato per raggiungere questo obiettivo. Penso che quello che suggerisci - costruire un dizionario con i valori - sia un modo sensato per andare qui. Non ci sono molte codifiche quindi dovrebbe essere piuttosto banale, e probabilmente più veloce di cercare un modo integrato per farlo.

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

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