1

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

4

1 回答 1

1

我将采取与为什么 nl_langinfo(CODESET) 与 localecharmap 不同中相同的答案?

你需要先打电话

setlocale(LC_ALL, "");
于 2012-06-12T09:55:26.730 回答