我将应用程序从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。 当使用相同的参数调用相同的函数(一个是硬编码数组的元素,另一个是硬编码字符串)时,这种情况可能是什么原因导致第一次调用的正常功能和第二次调用的失败?
答案 0 :(得分:1)
第二个“UTF-32”与第一个不同:第一个使用普通减号而第二个使用endash我猜。