Какие API доступны для преобразования кодировки в MacOSX? (значок у меня не работает)

В контексте почтового клиента мне нужно конвертировать в/из множества разных кодировок и юникода. До сих пор в Windows и Linux я использовал iconv для преобразования текста между наборами символов. Однако на Mac первое преобразование, которое я пробовал, из cp932 в utf-16 не удалось с кучей мусорных символов. У меня был Google, и некоторые люди предлагали сначала установить локаль с помощью setlocale, но это, похоже, не повлияло на ситуацию.

Может быть, мне вообще не стоит использовать iconv на Mac? Есть ли альтернативный API для преобразования кодировки?

Я также открыт для предложений по исправлению кода iconv... код в основном соответствует следующим строкам:

setlocale(LC_ALL,"");

iconv_t Conv;
if ((Conv = libiconv_open("utf-16", "cp932")) >= 0)
{
    // Convert
    int s = libiconv(Conv, &InBuf, (size_t*)&InLen, &OutBuf, (size_t*)&OutLen);
    libiconv_close(Conv);
}

Тот же вводимый текст в Windows работает нормально, на Mac выдает мусор.


person fret    schedule 06.12.2010    source источник


Ответы (1)


CFString (-framework CoreFoundation) имеет API преобразования символов. По сути, вы создаете CFString из строки CP932 (kCFStringEncodingDOSJapanese), после чего можете извлечь из нее данные UTF-16.

Дополнительная информация здесь.

person Nicholas Riley    schedule 06.12.2010
comment
Хороший. Единственной отсутствующей ссылкой помимо этого было получение CFStringConvertIANACharSetNameToEncoding на место, чтобы я мог использовать существующие имена наборов символов вместо идентификаторов кодировки, специфичных для Apple. Теперь все хорошо, спасибо. - person fret; 06.12.2010