Я использую 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.