iconv C API:从/到本地编码的字符集转换



我正在使用iconv C API,我希望iconv检测计算机的本地编码。这可能吗?显然是因为当我查看源代码时,我在文件 iconv_open1.h 中发现,如果 fromcodetocode 变量是空字符串 ( "" ),则使用 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, "");

最新更新