한글 인코딩과 변환 코딩 8비트 3문자를 6비트 4문자로 변경한다. UUE : 3Byte의 Binary Data -> 4Byte의 Text Data 1. 16진수 0x14 0x0F 0xA8 2. 2진수 00010100 00001111 10101000 -> 8bit * 3 3. 6개씩 끊기 000101 000000 111110 101000 -> 6bit * 4 4. 상위 비트 앞에 00추가 00000101 00000000 00111110 00101000 5. 16진수로 변환 0x05 0x00 0x3E 0x28 6. 이 숫자에 0x20 더함 (예외 0인 경우 0x00 -> 0x60) 0x25 0x60 0x5E 0x48 7. 최종 %`^H 8비트 3문자를 6비트 4문자로 변경한다. Base table : 2^6 = 64개로 맵핑 끝 부분의 padding(=)으로 Base64 식별 인코딩의 예 H A C (한 문자당 8bit 24bit) 1. 2비트로 표현한다. (8*3 = 24) 01001000 0100001 01000011 2. 6개로 나눈다 (6*4 = 24) 010010 000100 000101 00011 3. 10진수로 표기한다. 18 4 5 3 4. BaseTable에 각 인덱스에 맞는 값으로 변경한다. S E F D 5. [padding] bit % 3 == number of p SEFD 한글 코드 값은 그대로 표현 앞에 padding(=)을 붙여준다. 가 -> =B0=A1 안녕하세요 -> =BE=C8=B3=E7=C7=CF=BC=BC=BF=E4 한글 시작 표시함을 알림 <ESC>$)C <SO>, <SI> 사이에 한글 MSB를 0으로 Setting int i, j; for (i=27; i < 128; i++) { // ASCII printf("\t%c : 0x%x\n", i, i); } for (i=0xB0; i <= 0xC8; i++) { // KS 완성형 한글 코드 for (j=0xA1; j <= 0xFE; j++) { printf("%c%c : 0x%x%x\n", i, j, i, j); } } int alphabet[26]; Alphabet[26]; int ch = getchar(); while(ch != '\n') { if(ch >= 'A' && ch <= 'Z') Alphabet[ch-'A']++; else if(ch >= 'a' && ch <= 'z') alphabet[ch-'a']++; else printf("This is not Alphabet\n"); } for(i=0;i<26;i++) printf("%c : %d, %c : %d\n",'A'+i,Alphabet[i],'a'+i,alphabet[i]); int hangul[25][94] = {0}; int c1,c2; c1 = getchar(); while(c1 != '\n') { if(c1 >= 0xB0 && c1 <= 0xC8) { c2 = getchar(); if(c2 >= 0xA1 && c2 <= 0xFE) hangul[c1-0xB0][c2-0xA1]++; } } int i,j; for(i=0;i<25;i++) for(j=0;j<94;j++) if(hangul[i][h]) printf("%c%c : %d\n",0xB0+i,0xA1+j, hangul[i][j]); #include <stdio.h> int main() { int i, j; FILE *fp; char utf8[4]={0}; fp = fopen("out.txt", "w"); fprintf(fp, "%c%c", 0xFE, 0xFF); for (i=0xAC00, j=0; j < 11172; i++, j++) { utf8[0] = 0xE0; utf8[0] |= ((i >> 12) & 0x000F); utf8[1] = 0x80; utf8[1] |= ((i >> 6) & 0x003F); utf8[2] = 0x80; utf8[2] |= (i & 0x003F); fprintf(fp, "%s", utf8); fprintf(fp, ": 0x%x \n", i); } fclose(fp); puts("FIle <out.txt> has been created!"); return 0; } #include <stdio.h> int uni2utf8(int uni) { int utf; utf = 0x00E00000 | (uni << 4) & 0x000F0000; utf |= 0x00008000 | (uni << 2) & 0x00003F00; utf |= 0x00000080 | uni & 0x0000003F; return utf; } int utf2uni(int utf) { int uni; uni = utf & 0x0000003F; // last 6 bits in 3rd byte uni |= ((utf & 0x00003F00) >> 2); // 6 bits in 2nd byte uni |= ((utf & 0x000F0000) >> 4); // 4 bits in 1st byte return uni; } // return value: 0~18 int chosung_index(int uni) { return ((uni-0x0000AC00) / (21*28)); } // return value: 0~20 int jungsung_index(int uni) { return ((uni-0x0000AC00) % (21*28)) / 28; } // return value: 0~27 int jongsung_index(int uni) { return ((uni-0x0000AC00) % 28); } main() { int uni=0xC704; // '위' int utf; int cho, jung, jong; char str[4]; utf = uni2utf8(uni); // unicode -> utf-8 conversion printf("\tutf: 0x%x\n", utf); uni = utf2uni(utf); // unicode -> utf-8 conversion printf("\tuni: 0x%x\n", uni); cho = chosung_index(uni); jung= jungsung_index(uni); jong= jongsung_index(uni); printf("cho = %d\n", cho); printf("jung= %d\n", jung); printf("jong= %d\n", jong); }한글 인코딩
uuencode, uudecode
Base64
QP 변환
ISO 2022-KR
변환 코딩
ASCII 코드 출력과 KS 완성형 코드 한글 출력
영문자 빈도 조사
한글 빈도 조사
UTF-8 한글 출력
Unicode <-> UTF-8 변환
'정보검색-데이터마이닝' 카테고리의 다른 글
Stemming (0) | 2016.10.16 |
---|---|
정보 검색 개요 (0) | 2016.10.16 |
유니코드 Unicode (0) | 2016.10.15 |
한글 코드 (1) | 2016.10.15 |