유니코드 변환 (예) '가'->'0xAC00'
글쓴이: hoollahoop / 작성시간: 수, 2005/11/02 - 6:04오후
제목처럼 하려면 어떻게 해야 하나요..
변환하려는 문자열은 예처럼 한글뿐만 아니라
일본어 문자셋, 중국어 문자셋 등이 모두 올 수 있어야 합니다.
그리고 역으로 '0xAC00'->'가' 처럼도 되게 하려고 합니다.
임의로 제가 매핑 테이블을 만들어야 하나요?
maptable[][] = { {'가', '0xAC00'} , ... } 이런식으로요?
누가 만들어 놓은게 있나요?
제가 문자셋 관련해서 지식이 거의 없다보니..
질문도 맞게 드린건지 모르겠네요..
꼭 답변 부탁드립니다.
File attachments:
| 첨부 | 파일 크기 |
|---|---|
| 56.61 KB |
Forums:


iconv 로 UCS-2 로 변환하시고,bin2hex (ord) 하시
iconv 로 UCS-2 로 변환하시고,
bin2hex (ord) 하시고 앞에 0x 붙이세요.
반대로도 쉽겠죠.
https://xenosi.de/
원본이 UTF-8 이라면 utf8 to ucs2 로 구글링하면 계산만으로
원본이 UTF-8 이라면 utf8 to ucs2 로 구글링하면 계산만으로 변환되는 함수가 나옵니다.
https://xenosi.de/
응용해 보세요.libiconv를 사용한 예제입니다.[code:1]
응용해 보세요.
libiconv를 사용한 예제입니다.
#include <stdio.h> #include <iconv.h> main() { char buf[] = "가"; char obuf[1024]; iconv_t cd; char *ip, *op; int ileft, oleft; cd = iconv_open("utf-16be", "utf-8"); ip = buf; op = obuf; oleft = 1024; ileft = strlen(buf); iconv(cd, &ip, &ileft, &op, &oleft); printf("'%s'( utf-8 )==> '%s'(utf-16be)\n", buf, obuf); printf("utf-16be code : 0x%02X, 0x%02X\n", (unsigned char)*(obuf), (unsigned char)*(obuf+1)); printf("=================\n"); printf("{'%s', '0x%02X%02X'}\n", buf, (unsigned char)*(obuf), (unsigned char)*(obuf+1)); iconv_close(cd); return 0; }위 소스를 test.c로 저장하고,$ gcc -o test test.c
* 주의
했을때
제 경우에는, utf-8이 터미널 세팅입니다.
만일, 다른 터미널(예를들어 EUC-KR)이라면, iconv_open("utf-16BE", "EUC-KR") ;로 소스를 고쳐서 돌리셔야 한다는...
예제를 컴파일해 봤는데, 이해 안되는 값이 나옵니다.
EUC 형태 코드를 Unicode로 바꾸는 방법을 찾아보다가, 이 글을 찾게 되어, 코드대로 해 봤습니다.
되더군요. ( 코드 올려 주신 분 감사드립니다. :) )
근데, 이걸 함수로 만들어 보니, 예상 이외의 값이 나와 , 다시 올려봅니다.
#include <stdio.h> #include <iconv.h> int EUCtoUTF16(char **source, char **container, int sourceLength, int containerLength) { // change from EUC(buf) to UTF16(buf) // source: EUC-JP form's data buffer // container: UTF16 form. // sourceLength : byte size of string(1byte = length); // containerLength : byte size of string(1byte = length); iconv_t cd; int i,l = sourceLength; if (sourceLength > containerLength) { printf(" \n EUCtoUTF16;parameter(%d. %d.) error.", sourceLength, containerLength); return -1; } cd = iconv_open("utf-16be", "EUC-JP"); iconv( cd, source, &sourceLength, container, &containerLength ); printf(" \n result:%s(euc)->%s(utf)\n",source[0], container[0] ); for( i = 0; i < l; i+=2) printf("%x.%x->%x.%x.\n", (source[0])[i], (source[0])[i+1], (container[0])[i], (container[0])[i+1] ); iconv_close(cd); return 1; }; int main() { char buf[] = "、ォスメ、ッ"; char obuf[1024]; iconv_t cd; char *ip, *op; int ileft, oleft; ip = buf; op = obuf; oleft = 1024; ileft = strlen(buf); EUCtoUTF16( &ip, &op, 8 , 8); printf(" \n result:%s(EUC-JP)->%s(utf-16)", buf, obuf); printf(" \n code:(UTF-16):%02x.%02x", obuf[0],obuf[1]); printf(" \n result:%s(EUC-JP)->%s(utf-16)", buf+2, obuf+2); printf(" \n code:(UTF-16):%x.%x", obuf[2],obuf[3]); printf(" \n result:%s(EUC-JP)->%s(utf-16)", buf+4, obuf+4); printf(" \n code:(UTF-16):%x.%x", obuf[4],obuf[5]); printf(" \n result:%s(EUC-JP)->%s(utf-16)", buf+6, obuf+6); printf(" \n code:(UTF-16):%x.%x", obuf[6],obuf[7]); return 1; }결과 그림을 보면 아시겠지만, 변환 자체는 제대로 되는 데도 불구하고, 함수 안에서의 source, container 의 코드 값은 이상하네요.
특히 이해가 안 되는게, unsigned char임에도 %x로 값 찍어보면, 4바이트짜리 나옵니다. -_-;
부디... 제게 깨달음을...
Re: 예제를 컴파일해 봤는데, 이해 안되는 값이 나옵니다.
%x는 unsigned int를 출력할 때 쓰는 것입니다.
댓글 달기