Функция для обнаружения NSStringEncoding из NSURLResponse?

Я просто хотел знать, существует ли какая-либо существующая категория или какая-либо функция, которая вернет мне константу NSStringEncoding из объекта NSURLResponse.

Проблема, с которой я сталкиваюсь в данный момент, заключается в том, что я жестко закодировал кодировку в NSUTF8StringEncoding, когда я конвертирую данные ответа веб-службы в String, тогда это фактически вызывает проблему, поскольку моя веб-служба иногда возвращает ответ, закодированный в UTF8, а иногда и в ASCII. (ну, я не слишком уверен во всех кодировках, но да, иногда в ответе есть символы других языков, такие как японский, китайский и т. д.)

Итак, моя идея состоит в том, чтобы иметь категорию в NSURLResponse, которая определяет кодировку и возвращает, например.

 NSURLResponse * response = // NSURLResponse object ( web service response headers )
 NSData * responseData = // NSData object ( web service response data )
 NSStringEncoding encoding = [response stringEncodingUsed];
 NSString * responseText = [[NSString alloc]initWithData:responseData encoding:encoding];

person Bharat Jagtap    schedule 24.07.2013    source источник
comment
Ну, я знаю, как увидеть заголовок кодировки в urlResponse, а затем определить правильную кодировку, но я надеялся, что кто-то уже написал такую ​​функцию.   -  person Bharat Jagtap    schedule 24.07.2013
comment
Взгляните на stackoverflow.com/questions/5268661/ (однако для этого необходимо сначала записать данные в файл).   -  person Martin R    schedule 24.07.2013


Ответы (1)


Существует лучший способ.

Вы можете получить имя кодировки из URLResponse в виде строки, а затем выполнить поиск соответствующего NSStringEncoding.

NSString *encodingName = [aURLResponse textEncodingName];
NSStringEncoding encodingType = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName));

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

person Abcd Efg    schedule 10.11.2013