Mac OS X 上的 iconv 库:奇怪的行为

iconv library on Mac OS X: strange behavior

本文关键字:OS 上的 iconv Mac      更新时间:2023-10-16

我正在将应用程序从 CentOS 6 移植到 Mac OS X。它依赖于iconv,并且可以在CentOS中正常工作。但是,在Mac OS X上它没有。我看到以下行为:

const char *codePages[] = { "MAC", "LATIN1", "ISO_8859-1", "WINDOWS-1252", "ASCII" };
int codePagesCount = 5;
iconv_t converter1 = iconv_open("UTF-32", codePages[0]);// Works
if(converter1 != (iconv_t)-1)
   iconv_close(converter1);
iconv_t converter2 = iconv_open("UTF−32", "MAC");// Fails, returns -1
if(converter2 != (iconv_t)-1)
   iconv_close(converter2);

这段代码看起来微不足道:第一个iconv_open创建转换器并从codePages数组中获取代码页名称,它的零元素是MAC,所以对我来说,Mac OS X必须支持从自己的代码页到Unicode的转换是合乎逻辑的。第一次呼吁iconv_open有效。但是,对iconv_open的第二次调用也会执行相同的操作。它还创建从Mac编码到Unicode的转换器。无论出于何种原因,它都会失败并返回 -1。当调用具有相同参数的相同函数(一个是硬编码数组的元素,另一个是硬编码字符串)导致第一次调用功能正常而第二次调用失败时,这种情况的原因可能是什么?

第二个"UTF-32"与第一个不同:第一个使用普通减号,而第二个使用我猜的尾号。