2012-10-04 70 views
0

我正在将应用程序从CentOS 6移植到Mac OS X.它取决于iconv并且通常在CentOS中运行。但是,在Mac OS X上它不会。我看到以下行为:Mac OS X上的iconv库:奇怪的行为

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子创建转换器和代码页阵列获取的代码页的名称,它的零元是MAC,所以它是合乎逻辑的我,Mac OS X的绝支持从其自己的代码页转换为Unicode。第一个调用iconv_open的作品。 但是,第二次调用iconv_open也是这样。它还创建从Mac编码到Unicode的转换器。由于任何原因它失败并返回-1。 当调用具有相同参数的相同函数(一个是硬编码数组的元素,另一个是硬编码字符串)调用同一个函数时,会导致第一个调用的正常功能和第二个调用的失败,从而导致这种情况的原因是什么?

回答

1

第二个“UTF-32”与第一个不同:第一个使用简单的减号,而第二个使用endash我猜。

+0

谢谢,你说得对。 – Vitaliy

+0

这不是一个endash,它是用UTF-8编码的[Unicode字符'MINUS SIGN'(U + 2212)](http://www.fileformat.info/info/unicode/char/2212/index.htm) 'e28892'。 – lhf