인터넷 찾아보면 코드간 변환은 많이 있으나 MultiByte Char 과 WideChar의 설명은 흔치 않는 듯 하다.
이에 정리해 본다.
♣ MultiByte Characters
char ch[32] ; 와 같이 배열이 있다 치고, 이 배열에 한글을 입력한다. 라고 심플하게 기억하자.
char[0] 에 한글을 입력할 수 없다.
이에 여러 char 예를들어 char[0] ~ char[2] 와 같이 여러 바이트를 사용해 한글을 저장한다.
이를 MultiByte Char 라고 표현한다.
대표적으로 ANSI (CP949), UTF-8 이 있겠다.
♣ Wide Characters
넓은 캐릭터 ㅋ. Wide Char 의 경우, 위와 같이 가변길이가 아니라 모두 동일한 길이를 갖는다.
변수 Type 은 w_char 또는 TCHAR 이 될 것이다.
(TCHAR은 환경에 따라 64비트가 아닐 수도 있으나 대부분의 개발환경이 64비트이므로 TCHAR 도 포함했다.)
예를 들면 아래와 같다.
♣ 인코딩 선택
위 코드값 생성은 메모장을 추천한다.
메모장에서 텍스트 입력 후, 다른이름으로 저장하면 아래 인코딩 방식이 나온다.
원하는 타입으로 저장 후, Hex 코드를 보면 된다.
참고로, 나는 윈도우에서 HxD 프로그램을 사용해 Hex 코드를 본다.
무료이고 회사에서도 쓸 수 있다.
♣ 인코딩 변환
Windows API 는 인코딩 변환에 두 함수를 제공한다.
- WideCharToMultiByte ( )
- MultiByteToWideChar ( )
위 개념을 이해했다면 이제 함수명을 보고 이게 어떤 의미인지 파악이 쉬울 것이며 아래처럼 정리할 수 있다.
UTF-8 -> Unicode : MultiByteToWideChar ( ) 함수 사용
ANSI -> Unicode : MultiByteToWideChar ( ) 함수 사용
Unicode -> UTF-8 : WideCharToMultiByte ( ) 함수 사용
Unicode -> ANSI : WideCharToMultiByte ( ) 함수 사용
여기서 의문점이 생긴다.
그렇다면 UTF-8 에서 ANSI 는 어떻게 변환하는가, 또 그 반대는 어떻게 변환하는가?
한번에는 변환이 안되고 아래와 같이 Unicode 를 한번 거쳐야 한다 (라고 알고 있다.)
UTF-8 -> Unicode -> ANSI :
ANSI -> Unicode -> UTF-8
함수 호출은 MultiByteToWideChar ( ) -> WideCharToMultiByte ( ) 가 된다.
코드 변환하는 예제는 인터넷에서 찾으면 무궁무진하며
무작정 복붙하지 말고 위 개념을 익힌 후, 코드를 보면 바로 이해가 갈 것이다.
삽질은 나 하나로 충분하다. ㅋㅋ
'삽질미학 > C,C++' 카테고리의 다른 글
정규 표현식 모음 (0) | 2024.09.19 |
---|---|
2차원 벡터를 포인터로 넘겨 사용하기 (0) | 2024.02.13 |
함수 strtok() 의 대안, strsep() (0) | 2018.07.12 |
[C++] 삼각형 구조의 하향식 길찾기 (0) | 2017.07.18 |
[C++] 조합 구하기 (0) | 2017.07.13 |