我正在使用iconv C API,我希望iconv检测计算机的本地编码。这可能吗?显然是因为当我查看源代码时,我在文件 iconv_open1.h 中发现,如果 fromcode
或 tocode
变量是空字符串 ( ""
),则使用 locale_charset()
函数调用使用本地编码。
有人还告诉我,为了将语言环境编码转换为 unicode,我只需要使用iconv_open ("UTF-8", "")
不幸的是,我在文档中没有提到这一点。
当我将一些 iso-8859-1 文本转换为区域设置编码(在我的机器上是 utf-8)时,在转换过程中我得到 errno=EILSEQ(非法序列)。我检查了一下,iconv_open没有返回任何错误。
如果我指定"utf-8"
而不是iconv_open
中的空字符串,那么我不会收到任何错误。显然,iconv 未能检测到我当前的字符集。
编辑:我用一个简单的 C 程序检查了它puts(nl_langinfo(CODESET))
,我得到了ANSI_X3.4-1968
(这是 ASCII)。显然,我在字符集检测方面遇到了问题。
编辑:这应该与为什么nl_langinfo(CODESET)与locale charmap不同有关?
附加信息:我的程序是用 Ada 编写的,我在链接时绑定到 C 函数。显然,在 Ada 运行时和 C 运行时中,区域设置的初始化方式不同。
我将采用与为什么nl_langinfo(代码集)与区域设置 charmap 不同的答案?
您需要先打电话
setlocale(LC_ALL, "");