Presentation is loading. Please wait.

Presentation is loading. Please wait.

UTF ENCODING (UTF-8,16,32) 발표자 - 김규호.

Similar presentations


Presentation on theme: "UTF ENCODING (UTF-8,16,32) 발표자 - 김규호."— Presentation transcript:

1 UTF ENCODING (UTF-8,16,32) 발표자 - 김규호

2 차례 UTF Encoding ? 유니코드 Character Set 유니코드 인코딩 UTF-8, 16 ICONV
인코딩 API - c, java 참고자료

3 UTF Encoding ? UTF-8 유니코드 ( UCS-2, UCS4 ) UTF-16 UTF-32

4 유니코드의 Character Set UCS-2(Universal Character Set 2)
2Byte Character Set 1개의 언어판 (BMP)을 정의 1개의 언어판 = 65536개의 코드 묶음 UCS-4(Universal Character Set 4) 4Byte Chracter Set 32,768 언어판 정의 F BMP ( Basic Multilingual plane )

5 Suitable external encoding of Unicode
왜 인코딩이 필요한가? UCS-2,4 는 유니코드를 저장하는 변수의 크기를 정의 But, 바이트 순서에 대해서 표준화하지 못했음. 파일처리 프로그램들이 바이트 단위로 동작 UCS와는 잘 맞지 않음 즉, 파일을 인식 시 이 파일이 UCS-2,UCS-4인지 인식하고 각 경우를 구분해서 모두 다르게 구현해야 하는 문제 발생 We Need Suitable external encoding of Unicode

6 1 A 3 1 3 ??

7 유니코드 인코딩(UTF) UTF(Unicode Transformation Format) UTF-8(in web)
MIN: 8bit, MAX: 32bit(1 Byte * 4) UTF-16(in windows, java) MIN: 16bit, MAX: 32bit(2 Byte * 2) UTF-32(in unix) MIN: 32bit, MAX: 32bit(4 Byte * 1)

8 UTF-8 장점 & 단점 장점 단점 하위 호환성(ASCII) – 하위8비트가 ascii 코드와 동일 XML문서의 표준 인코딩
모든 유니코드 문자 표현 가능 미리 바이트 크기를 알 수 있다. 간단한 비트 연산만 사용해서 효율적 단점 크기가 크다.(가변적 인코딩) 1 ~ 4 byte 문자열 처리가 간단하지 않다.

9 UTF-8 0xxxxxxx 110xxxxx 10xxxxxx 1110xxxx 11110zzz 10zzxxxx
코드범위 UTF-8 설 명 F 1Byte 0xxxxxxx ASCII와 동일한 범위 (MSB = 0) FF 2Byte 110xxxxx 10xxxxxx 첫 바이트는 ‘1’로 그 문자를 표시하는데 필요한 바이트 수 결정 110(2Byte) or 1110(3바이트) 나머지 바이트들의 상위 비트는 10 FFFF 3Byte 1110xxxx FFFF 4Byte 11110zzz 10zzxxxx UTF-16 surrogate 영역 나머진 동일

10 1 C 7 4

11 1 8 1 C 7 4 1 F

12 0xxxxxxx 110xxxxx 10xxxxxx 1110xxxx 11110zzz 10zzxxxx
코드범위 UTF-8 설 명 F 1Byte 0xxxxxxx ASCII와 동일한 범위 (MSB = 0) FF 2Byte 110xxxxx 10xxxxxx 첫 바이트는 ‘1’로 그 문자를 표시하는데 필요한 바이트 수 결정 110(2Byte) or 1110(3바이트) 나머지 바이트들의 상위 비트는 10 FFFF 3Byte 1110xxxx FFFF 4Byte 11110zzz 10zzxxxx UTF-16 surrogate 영역 나머지는 동일

13 2진수로 표현 C704 = 뒤 에서부터 6자리씩 끊어서 표기 1100 011100 000100 첫 바이트는 ‘1’로 그 문자를 표시하는데 필요한 바이트 수 결정 Ex) 110(2Byte) or 1110(3바이트) 나머지 바이트들의 상위 비트는 10 11 10 1100 10 011100 10 000100 16진수로 표시 EC 9C 84 Unicode ‘위’ C704 는 UTF-8 EC 9C 84 로 인코딩 됨

14 ` Uni-Searcher Site

15 UTF-16 인코딩의 기본 단위는 16비트, 즉 2바이트 기본 언어판(BMP) 2Byte 인코딩
63,488개 (= 65,536 – 2,048) 문자 표현 가능 대행문자 영역 2,048개를 제외한 BMP 63,488개의 코드를 문자로 사용. ucs-2와 동일 보충 언어판(SMP) 4Byte 인코딩 U ~ U+10FFFF : 100만여개(1,048,576개) 대행문자(surrogate) 영역 2개의 16-bit 쌍을 이용 16개 SMP 언어판 코드(1,048,576개 문자) 표현 가능 Surrogate <High, Low> : 1024*1024 High Surrogate : U+D800 ~ U+DBFF Low Surrogate : U+DC00 ~ U+DFFF

16 UTF-16 인코딩 방법 yyyyyyyy xxxxxxxx xxxxxxxx yyyyyyyy 110110ZZ ZZxxxxxx
내 용 UTF-8 UTF-16 yyyyyyyy xxxxxxxx UTF-16BE (Big Edian) UTF-16LE (Little Edian) xxxxxxxx yyyyyyyy High Surrogate 110110ZZ ZZxxxxxx Low Surrogate 110111yy yyyyyyyy 보충 언어판 zzzzz xxxxxxyy yyyyyyyy * ZZZZ = zzzzz-1

17 Iconv Iconv 유닉스 계열의 OS에서, 캐릭터 encoding 을 하는데 쓰이는 표준화된 API

18 Iconv IconV ex) # iconv -f EUC-KR -t UTF-8 -o 다른파일명 원본파일명 입/출력 형식 지정:
-f, --from-code=<이름> 원 문서 인코딩 -t, --to-code=<이름> 출력 인코딩 출력 조정: -o, --output=FILE 출력 파일

19 Iconv PHP 에서 사용할때 string iconv ( string $in_charset , string $out_charset , string $str )

20 인코딩 API 유니코드와 ANSI 문자열간의 변환을 위해
MultiByteToWideChar : 멀티바이트 문자열을 유니코드로 변환하기 WideCharToMultiByte : 유니코드 문자열을 멀티바이트 문자열로 변환 ANSI(MultiByte) -> UCS-2(WideChar) -> UTF-8(MultiByte)

21 인코딩 API int WideCharToMultiByte{ UINT CodePage, // code page
DWORD dwFlags, // performance and mapping flags LPCWSTR lpWideCharStr, // wide-character string Int cchWideChar, // number of chars in string LPSTR lpMultiByteStr, // buffer for new string Int cbMultiByte, // size of buffer LPCSTR lpDefaultChar, // default for unmappable chars LPBOOL lpUsedDefaultChar // set when default char used }; Code Page에는 CP_ACP (ANSI코드), CP_UTF8 등이 올수 있다 ANSI(MultiByte) -> UCS-2(WideChar) -> UTF-8(MultiByte)

22 인코딩 API Int MultiByteToWideChar{ UINT CodePage, // code page
DWORD dwFlags, // performance and mapping flags LPCSTR lpMultiByteStr, // 변환할 MultiByte String Int cbMultiByte, // 변환할 MultiByte String 크기 LPWSTR lpWideCharStr, // buffer for new string Int cchWideChar, // size of buffer }; Code Page에는 CP_ACP (ANSI코드), CP_UTF8 등이 올수 있다 ANSI(MultiByte) -> UCS-2(WideChar) -> UTF-8(MultiByte)

23

24 인코딩 API ANSI To UTF8 ANSI(MultiByte) -> UCS-2(WideChar) -> UTF-8(MultiByte) 따라서 WideCharToMultiByte 함수를 호출할 때 첫 번째 인자로 CP_UTF8을 지정하면 된다

25 인코딩 API 자바 getByte 함수 사용 String.getByte(argument) 캐릭터셋 설명 US-ASCII
ISO ISO LATIN 알파벳 UTF-8 8비트 UCS 형식 UTF-16BE 16비트 UCS 형식, 빅인디언 UTF-16LE 16비트 UCS 형식, 리틀인디언 UTF-16 16비트 UCS 변환형식, 옵션의 바이트 순서대로

26 인코딩 API 예제

27 참고자료

28 감사합니다


Download ppt "UTF ENCODING (UTF-8,16,32) 발표자 - 김규호."

Similar presentations


Ads by Google