2012-10-04 93 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