我正在使用 iconv C API,我希望 iconv 检测计算机的本地编码。那可能吗?显然是因为当我查看源代码时,我在文件iconv_open1.h中发现,如果fromcode
ortocode
变量是空字符串 ( ""
),则使用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)。显然,我遇到了字符集检测问题。
编辑:这应该与为什么 nl_langinfo(CODESET) 与 localecharmap 不同?
附加信息:我的程序是用 Ada 编写的,我在链接时绑定到 C 函数。显然,语言环境设置在 Ada 运行时和 C 运行时中的初始化方式不同。