Подтвердить что ты не робот

Преобразование имени кодировки в NSStringEncoding

Учитывая строку charset, такую ​​как "utf-8", "iso-8859-1", "us-ascii" и т.д., существует ли какой-либо встроенный способ получения соответствующего NSStringEncoding в Cocoa?

Сейчас я смотрю только на сборку NSDictionary, содержащую каноническую версию имени, сопоставленную с NSStringEncoding, а затем механизм поиска, который канонизирует вход таким же образом. Но не существует способа получить NSUTF8StringEncoding с учетом строки "UTF-8" и т.д.?

4b9b3361

Ответ 1

Вам нужно пройти через CoreFoundation.

CFStringConvertIANACharSetNameToEncoding
CFStringConvertEncodingToNSStringEncoding

Сначала преобразование IANA Char в значение CFStringEncoding (что не то же самое, что и NSStringEncoding), а затем преобразование CFStringEncoding в NSStringEncoding.

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

Ответ 2

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

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

Ответ 3

Я не думаю, что есть какой-либо встроенный способ достижения этого. Я думаю, что вы предлагаете - создание словаря со значениями - это разумный способ пойти сюда. Существует не так много кодировок, поэтому это должно быть довольно тривиально и, вероятно, быстрее, чем пытаться найти встроенный способ сделать это.