我正在使用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没有返回任何错误。
如果不是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运行时中没有以相同的方式初始化。
答案 0 :(得分:0)
我将采用与Why is nl_langinfo(CODESET) different from locale charmap?
相同的答案您需要先致电
setlocale(LC_ALL, "");