iconv_open 예제

iconv 변환 모듈은 fromcode%tocode.so의 형태로 되어 있으며, 아이콘 함수를 사용하려면 /usr/lib/iconv 디렉토리 아래의 iconv 모듈 라이브러리에 있어야 합니다. 따라서 iconv -l 명령에 의해 나열 된 두 코드 집합 사이 변환할 수 없습니다. 모든 iconv 패키지가 설치되고 필수 모듈을 사용할 수 없는 경우 중간 코드 집합으로 유니코드 인코딩(예: UTF-32)을 사용하여 2단계 변환을 수행할 수 있습니다. 또는 사용자 지정 변환 모듈을 개발할 수 있습니다. 사용자 정의 iconv 변환 모듈을 만들려면 geniconvtbl 유틸리티를 사용합니다. geniconvtbl 유틸리티에 대한 입력 파일 형식에 대한 자세한 내용은 geniconvtbl(4) 맨 페이지를 참조하십시오. 이 트릭을 사용하면 인코딩된 바이트 스트림을 문자로 세분화할 수 있습니다. 그러나 Iconv의 WCHAR_T 해석이 프로세스의 현재 로캘에 따라 달라질지 여부는 분명하지 않습니다. 울리히가 말한 것처럼 보이지만, iconv() 로케일을 인식하는 방식으로 행동한다는 것은 정상적인 행동과는 정말 상반되는 것처럼 보입니다. iconv_open() 또는 iconv() 또는 둘 다라고 부를 때 현재 로캘을 사용합니까? 이것은 “iconv” 라이브러리의 C에서 간단한 예입니다. 이 예제에서는 일본어 EUC 인코딩의 문자열을 UTF-8(8비트 유니코드 전송 형식) 인코딩으로 변환합니다.

이진 인코딩 된 문자열을 인쇄하여 iconv의 작동 방식을 보여 줍니다. 다음은 iconv 라이브러리를 사용하는 간단한 예제입니다. 이는 비교적 간단한 예제이므로 문자 내의 바이트에서 변환을 중지하여 발생하는 경계 문제를 처리하지 않습니다. 다음 코드 조각은 단일 바이트 ISO 8859-2 코드 집합에서 UTF-8로 문자열 złoty(폴란드 통화)를 변환하기 위한 iconv_open() 함수를 사용하는 방법을 보여 주며 있습니다. iconv를 사용하여 변환을 수행하려면 iconv_open() 함수를 호출하는 변환 설명기를 만들고 호출이 성공했는지 확인해야 합니다. 이 변환 호출은 이전 예제의 변환 설명자 cd를 사용합니다. 대상 코드 집합은 iconv_open() 함수의 첫 번째 인수입니다. iconv_t xttx = iconv_open(“UTF-8″,”KOI8-R”); 위의 예제 프로그램의 출력은 UTF-8 인코딩에서 다음과 같습니다: iconv_open() 및 iconv() 함수에 올바른 매개 변수 순서가 있는지 확인합니다.

함수 iconv_open()에는 첫 번째 매개 변수 OUTPUT 인코딩과 두 번째 매개 변수 INPUT 인코딩이 있습니다. iconv() 함수는 첫 번째 매개 변수 INPUT 변수로, 두 번째 매개 변수는 OUTPUT 변수로 있습니다. 이러한 불일치는 정말 혼란스럽습니다. 여기에 하나의 쿼리. 그래서 CHAR 문자열을 UTF8 String으로 변환하려면 예를 들어 길이 11의 char 문자열을 변환하려면 아래와 같이 크기를 할당해야한다는 단점이 있습니다. 이러한 모든 C99 함수는 현재 로캘의 아이디어를 기반으로 합니다. 이것은 setlocale () 호출에 의해 설정된 프로세스 전체의 글로벌 (심각하게! 총, 내가 알고있다)입니다. 따라서 두 개 이상의 인코딩에서 문자를 디코딩하려면 매번 setlocale() 작업을 수행해야 하며, 이 기능은 프로그램의 모든 스레드에서 모든 로캘별 함수에 영향을 줍니다.