C에서 iconv를 이용한 인코딩 변환

아래는 Euc-Kr을 Utf-8로 변환하는 예제.

#ifndef _UTF8TOEUCKR
#define _UTF8TOEUCKR

#include 
static int UTF8toEUCKR( char *outBuf, int outLength, char *inBuf, int inLength )
{
iconv_t cd = iconv_open( "EUC-KR", "UTF-8" );

int ires = (int)iconv( cd, &inBuf, (size_t*)&inLength, &outBuf, (size_t*)&outLength );

iconv_close(cd);

return ires;
}

#endif

libiconv

홈페이지: http://ftp.gnu.org/pub/gnu/libiconv/

캐릭터 인코딩 변환 라이브러리.

For historical reasons, international text is often encoded using a language or country dependent character encoding. With the advent of the internet and the frequent exchange of text across countries – even the viewing of a web page from a foreign country is a “text exchange” in this context -, conversions between these encodings have become important. They have also become a problem, because many characters which are present in one encoding are absent in many other encodings. To solve this mess, the Unicode encoding has been created. It is a super-encoding of all others and is therefore the default encoding for new text formats like XML.
Still, many computers still operate in locale with a traditional (limited) character encoding. Some programs, like mailers and web browsers, must be able to convert between a given text encoding and the user’s encoding. Other programs internally store strings in Unicode, to facilitate internal processing, and need to convert between internal string representation (Unicode) and external string representation (a traditional encoding) when they are doing I/O. GNU libiconv is a conversion library for both kinds of applications.

다운로드: 1.13

일반 유니코드(Unicode)와 ‘UTF-8 유니코드’의 차이

출처: http://mwultong.blogspot.com/2006/05/unicode-utf-8.html

(1) 보통의 한국어 텍스트 문서: 이것은 아스키 문서이며 유니코드가 아닙니다. 영문/숫자/기호는 1바이트. 한글과 한자는 2바이트로 표현됩니다. euc-kr 또는 ksc_c_5601-1987 로 불리는 인코딩이며 웹페이지 작성에 사용할 수 있습니다. 특수한 외국어 문자나 일본식/중국식 한자는 표현할 수 없습니다.

다음의 2개가 유니코드입니다:

(2) 일반 유니코드(Unicode): 모든 글자를 2바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 인터넷에 HTML 파일로 올릴 수 없습니다. 즉 웹페이지 작성에 쓸 수 없습니다.

(3) UTF-8 유니코드: 영문/숫자/기호는 1바이트로, 한글과 한자 등은 3바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 웹페이지 작성에 쓸 수 있습니다.

MS윈도우2000/XP 이상에서는, 외부적으로는 ‘일반 아스키 인코딩(1번)’을 사용하고, 내부적으로는 ‘일반 유니코드(2번)’를 사용합니다.

유닉스/리눅스/오픈소스 진영에서는 (1)번 또는 ‘UTF-8 유니코드(3번)’를 기본으로 사용합니다.

그렇지만 윈도 메모장에서도 UTF-8 유니코드 문서를 읽고 저장할 수는 있습니다.