2012-10-04 5 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이며, 컨버터를 생성하고 코드 페이지 배열에서 코드 페이지 이름을 가져옵니다 그 맥 OS X의 필수 자체 코드 페이지에서 유니 코드로의 변환을 지원합니다. iconv_open에 대한 첫 번째 호출이 작동합니다. 그러나 두 번째 iconv_open 호출은 동일한 작업을 수행합니다. 또한 Mac 인코딩에서 유니 코드로 변환기를 만듭니다. 그리고 어떤 이유로 든 실패하고 -1을 반환합니다. 동일한 인수 (하드 코딩 된 배열의 요소, 다른 하나는 하드 코드 된 문자열)를 사용하여 동일한 함수를 호출하면 첫 번째 호출에 대해 정상적인 기능을 수행하고 두 번째 호출에 대해 실패 할 때 이러한 상황이 발생할 수 있습니다.

답변

1

두 번째 "UTF-32"는 첫 번째와 동일하지 않습니다. 첫 번째 것은 일반 빼기 기호를 사용하고 두 번째 것은 빼기 기호를 사용합니다.

+0

감사합니다. – Vitaliy

+0

UTF-8로 코딩 된 [유니 코드 문자 'MINUS SIGN'(U + 2212)] (http://www.fileformat.info/info/unicode/char/2212/index.htm)은 끝이 아닙니다. 'e28892'. – lhf