iconv C API:从/到本地编码的charset转换

时间:2012-06-12 09:04:58

标签: character-encoding locale detection iconv

我正在使用iconv C API,我想iconv来检测计算机的本地编码。那可能吗?显然,这是因为当我查看源代码时,我在文件iconv_open1.h中发现,如果fromcodetocode变量是空字符串(""),那么本地使用locale_charset()函数调用使用编码。

有人还告诉我,为了将语言环境编码转换为unicode,我只需要使用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)。显然,我遇到了charset检测的问题。

编辑:这应该与Why is nl_langinfo(CODESET) different from locale charmap?

相关

附加信息:我的程序是用Ada编写的,我在链接时绑定到C函数。显然,语言环境设置在Ada运行时和C运行时中没有以相同的方式初始化。

1 个答案:

答案 0 :(得分:0)

我将采用与Why is nl_langinfo(CODESET) different from locale charmap?

相同的答案
  

您需要先致电

setlocale(LC_ALL, "");