Кодировка NSData

В настоящее время я пытаюсь разобрать NSData в своем приложении для iOS. Проблема в том, что я не могу найти правильную кодировку иврита для синтаксического анализа. Я должен декодировать данные, используя кодировку Windows-1255 (тип кодировки иврита для Windows) или кодировку ISO 8859-8, иначе я получу банальную тарабарщину. Ближе всего к решению проблемы я использовал

CFStringConvertEncodingToNSStringEncoding(CFStringEncodings.ISOLatinHebrew)

но он выдает 'CFStringEncodings' is not convertible to 'CFStringEncoding' (обратите внимание на Encodings vs Encoding).

Что я могу сделать, чтобы правильно закодировать данные?

Спасибо!


person Lior Pollak    schedule 09.01.2015    source источник


Ответы (2)


Проблема в том, что CFStringEncodings — это перечисление, основанное на CFIndex (которое, в свою очередь, является псевдонимом типа для Int), тогда как CFStringEncoding — это псевдоним типа для UInt32. Поэтому вам нужно явно преобразовать значение .ISOLatinHebrew в CFStringEncoding:

let cfEnc = CFStringEncodings.ISOLatinHebrew
let enc = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(cfEnc.rawValue))
person Martin R    schedule 09.01.2015

Оказывается, мне нужно было немного испачкать руки. Я увидел, что CFStringEncodings имеет отношение к файлу CFStringEncodingsExt.h, поэтому искал в файле помощь. Внезапно я наткнулся на огромный CF_ENUM, который включал именно то, что мне было нужно — все CFStringEncodings по их UInt32 значению!

Так получилось, что kCFStringEncodingISOLatinHebrew = 0x0208, /* ISO 8859-8 */

Я призываю всех, кто сталкивается с этой проблемой кодировки, перейти к этому файлу и найти нужную кодировку.

person Lior Pollak    schedule 09.01.2015