iconv C API: преобразование кодировки из/в локальную кодировку

Я использую iconv C API и хочу, чтобы iconv определял локальную кодировку компьютера. Это возможно? Видимо потому, что когда я смотрю исходный код, я нахожу в файле iconv_open1.h, что если переменные fromcode или tocode являются пустыми строками (""), то используется локальная кодировка с использованием вызова функции locale_charset().

Кто-то также сказал мне, что для преобразования кодировки локали в юникод все, что мне нужно, это использовать iconv_open ("UTF-8", "")

К сожалению, я не нашел упоминания об этом в документации.

И когда я конвертирую некоторый текст iso-8859-1 в кодировку локали (которая на моей машине utf-8), то во время преобразования я получаю errno=EILSEQ (недопустимая последовательность). Я проверил, и iconv_open не выдал никакой ошибки.

Если вместо пустой строки в iconv_open указать "utf-8", то ошибки не будет. Очевидно, iconv не смог обнаружить мою текущую кодировку.

изменить: я проверил с помощью простой программы C, что puts(nl_langinfo(CODESET)) и я получаю ANSI_X3.4-1968 (это ASCII). Судя по всему, у меня возникла проблема с определением кодировки.

редактировать: это должно быть связано с Почему nl_langinfo (CODESET) отличается от локали шармап?

дополнительная информация: моя программа написана на Аде, и я привязываюсь во время компоновки к функциям Си. По-видимому, настройка локали инициализируется по-разному в среде выполнения Ada и среде выполнения C.


person Mildred    schedule 12.06.2012    source источник
comment
Есть ли шанс, что вы сможете воспроизвести проблему в десятистрочной тестовой программе?   -  person sarnold    schedule 12.06.2012


Ответы (1)


Я возьму тот же ответ, что и в Почему nl_langinfo(CODESET) отличается из локали charmap?

Вам нужно сначала позвонить

setlocale(LC_ALL, "");
person Mildred    schedule 12.06.2012