47
1 CHARACTER SET 과 CHARACTER ENCODING 과 과과과 과과과

전영규 유니코드 세미나_공개용

Embed Size (px)

Citation preview

Page 1: 전영규 유니코드 세미나_공개용

1

CHARACTER SET과 CHARACTER ENCODING 의 모든것

전영규

Page 2: 전영규 유니코드 세미나_공개용

▪한글 815 광고

2

Page 3: 전영규 유니코드 세미나_공개용

▪ ASCII

▪ 한글 인코딩 조합협 / 완성형▪ UNICODE

▪ DISCUSSION

3

Page 4: 전영규 유니코드 세미나_공개용

▪A CHARACTER SET

▪A CHARACTER ENCODING

A CHARACTER SET VS A CHARACTER ENCODING

4

A character set is a collection of letters and symbols used in a writing system. For example, the ASCII character set covers letters and symbols for English text (http://www.w3.org)

케릭터셋 , 문자셋 , 문자집합 으로 불림

A character encoding is the key that maps a particular byte or sequence of bytes to particular characters that the font renders as text. (http://www.w3.org)

문자 집합을 컴퓨터가 사용할 수 있도록 특정 바이트로 변환

Page 5: 전영규 유니코드 세미나_공개용

ASCII

▪디지털 장비들과의 문자 전달 , 처리 , 저장 필요▪American Standard Code For Information

Interchange

▪알파벳 대소문자 95, 제어 문자 33 ( 총 128 개 문자 )

▪7 bit

▪US-ASCII, US7ASCII, IBM367, CP367, CSASCII로 불림 5

Page 6: 전영규 유니코드 세미나_공개용

6

95 개

Page 7: 전영규 유니코드 세미나_공개용

7

33 개

Page 8: 전영규 유니코드 세미나_공개용

▪ 유닉스 ( 리눅스 )

Control Character

8

▪ 윈도우

Page 9: 전영규 유니코드 세미나_공개용

▪ 리눅스에서 작성 하고 윈도우 에서 볼 경우

Control Character

9

▪ 윈도우 작성 하고 리눅스 에서 볼 경우

Page 10: 전영규 유니코드 세미나_공개용

Extended ASCII

▪8bit 를 사용한 여러 버전의 확장 ASCII 만들어냄▪128 까지는 ASCII 와 동일 하고 그 이후 128~255 나라에 맞는 언어와 심볼 추가▪ ISO 8859 Series 표준 채택▪ 그중에서 ISO 8859-1( 또는 ISO Latin 1) 가 가장 많이 쓰임▪ MS 에서는 ISO 8859-1 과 유사한 Windows-1252 사용 128-159 제어 문자로 사용▪아시아 문자 표현 불가능 10

Page 11: 전영규 유니코드 세미나_공개용

11

Page 12: 전영규 유니코드 세미나_공개용

한글 문자 집합과 인코딩▪영어 , 유럽어는 알파벳을 기초로 사용하므로

256 개의 코드로 충분▪중국 , 일본 , 한국 ( CJK Chinese-

Japanese-Korean) 에서 사용하는 한자 , 한글 , 병음 , 주음 기호 확장 ASCII 로 처리 불가능▪한글 처리 하는 방법 조합형과 완성형

12

Page 13: 전영규 유니코드 세미나_공개용

한글 조합형 /완성형▪조합형 - 초성 , 중성 , 종성을 조합하여 만드는 방법 - N 바이트 조합형 - 3 바이트 조합형 - 2 바이트 조합형▪완성형

- 각각의 음절에 코드 부여 - 7 바이트 완성형- 2 바이트 완성형

13

Page 14: 전영규 유니코드 세미나_공개용

조합형 : N 바이트▪각각의 개별적인 한글 자모를 영문자에 매칭▪2 바이트 에서 5 바이트 사용▪시작과 끝에 SI(Shift in) ^N, SO(Shift Out)

^O 삽입 하여 한글 인식▪전영규 ^NXfDWjWAw^O저ㄴ여ㅇㄱㅠ

14

Page 15: 전영규 유니코드 세미나_공개용

조합형 : 3바이트▪한 글자의 길이가 가변적인 n 바이트 단점을 보완하기 위해 탄생▪항상 3 바이트 유지

- 초성 , 중성 , 종성 각각 1 바이트씩 할당- 종성 없는 경우 ‘채움 글자’로 3 바이트 유지- ㅄ 과 같은 겹낱자도 1 바이트 표현▪2 바이트 조합형이 나오면서 자취를 감춤 15

Page 16: 전영규 유니코드 세미나_공개용

조합형 : 2바이트▪초성 , 중성 , 종성에 각각 5 bit 씩 할당▪처음 1 bit 는 1 로 표시 하여 한글임을 표시▪한국 IBM, 삼보 , 금성 조합형 , 삼성 조합형 업체들만의 조합형 만듦으로써 호환 불가능

16

Page 17: 전영규 유니코드 세미나_공개용

완성형 : 7비트▪청계천 주변 상가에서 만들어져서 “청계천 한글” 이라고 불림▪일반적으로 조합에 한글 사용

- aB 와 같이 로마자 소문자 뒤에- }a 와 같이 기호 뒤에 로마자가 오는 경우▪dBase -> 늦 ASE 로 표기

17

Page 18: 전영규 유니코드 세미나_공개용

완성형 : 2바이트▪각각의 음절에 2 바이트씩 부여 ▪KSC5601-1987( 현재 KS X 1001) 으로 채택▪공식적으로 ISO/IEC 2022 의 호환성 위해▪많은 상용 업체들의 조합형 선택에 형평성 문제가 있어 완성형을 선택 했다는 후문도 있음

18

Page 19: 전영규 유니코드 세미나_공개용

완성형 : 2바이트

19

Page 20: 전영규 유니코드 세미나_공개용

KSC5601-1987(KSX 1001)

▪한국어 문자 집합 ( euc-kr 은 인코딩 )

▪현대 한글 11,172 중 한글 2, 350 자 , 한자 4,888 표현 가능▪한글 창제의 원리 초 , 중 , 종성 구별이 없어 단순한 부호에 불과하다는 의견

20

Page 21: 전영규 유니코드 세미나_공개용

EUC-KR

▪EUC(Extended Unix Code) 벨 연구소에서 유닉스에서 영어를 제외한 문자 표시하기 위한 인코딩▪EUC-CN, EUC-TW, EUC-JP

▪EUC-KR - 한글 인코딩 - 영문 KSC5636 (KS X 1003) ( \ -> ₩) - 한글 KSC5601-1987 (KS X 1001) 한글2,350 자

21

Page 22: 전영규 유니코드 세미나_공개용

EUC-KR(KSC5601-1987) 문제점▪ 1990 년에 방영된 MBC 드라마 “똠방각하”“똠” -> “?” 로 표시

▪ “ 찦차를 타고 온 펲시맨과 쑛다리 똠방각하”“ ? 차를 타고 온 ? 시맨과 ? 다리 ? 방각하  

22

Page 23: 전영규 유니코드 세미나_공개용

한글 815 ▪조합형을 사용 하고 있던 아래아한글이 완성형을 사용 했던 MS 워드를 디스 했던 광고▪MS 워드에서 ‘비행기가 날아간다 쓩 ~’ 를 표시 할수 없어 ‘비행기가 날아간다 ㅆ ㅠ ㅇ

~’ 로 표시▪MS 워드는 쓔 자가 없어 생긴 문제▪한글 815

23

Page 24: 전영규 유니코드 세미나_공개용

확장 완성형 코드▪MS 가 독자적으로 제정한 인코딩▪완성형에서 사용할 수 없었던 8,822 자 추가 하면서 현대 한글 11,172 표현 가능 ▪표준이 아님에도 불구하고 윈도우 95 와 점유율과 함께 널리 사용▪MS949, CP949, Win949 라고도 표현

Outlook, IE, Frontpage 등에서는 MS949 를 ks_c_5601-1987 로 표시 하기도 함▪“ 똠방각하” 몇가지 문자 표현 가능

24

Page 25: 전영규 유니코드 세미나_공개용

유니코드 탄생 배경▪한 시스템 또는 문서에서 여러 언어 섞어 쓰기 불가능▪언어가 틀린 두 지역간에 문서 교환 불가능▪영어 résumés -> 히브리어 r ג sum ג s

25

Page 26: 전영규 유니코드 세미나_공개용

유니코드 시작▪ ISO 에서 표준 ISO 10646 문자셋을 만들기 위해 시작

- 정식 이름은 UCS(Universal Character Set)

▪ Apple, Xerox, Sun, MS 등이 다국어 지원 위해 Unicode 컨소시엄 조직 ▪Unicode 컨소시엄이 ISO 에게 자신들의 표준 사용할 것을 제안 하면서 1993 년 ISO 10646-1 국제 표준 만들어짐▪ ISO 와 Unicode 컨소시엄은 각자 목적이 달라 각자 나름대로의 버전을 발전 시키고 있음

26

Page 27: 전영규 유니코드 세미나_공개용

27

Version Year Month (Day)

8.0.0 2015 June 17

7.0.0 2014 June 16

6.3.0 2013 September 30

6.2.0 2012 September 26

6.1.0 2012 January 31

6.0.0 2010 October 11

5.2.0 2009 October 1

5.1.0 2008 April 4

5.0.0 2006 July 14

4.1.0 2005 March 31

4.0.1 2004 March

4.0.0 2003 April

3.2.0 2002 March

3.1.1 2001 August

3.1.0 2001 March

3.0.1 2000 August

3.0.0 1999 September

2.1.9 1999 April

2.1.8 1998 December

2.1.5 1998 August

2.1.2 1998 May

2.0.0 1996 July

1.1.5 1995 July

1.1.0 1993 June

1.0.1 1992 June

1.0.0 1991 Octobe

11,172 자의 한글 모두 포함

Page 28: 전영규 유니코드 세미나_공개용

유니코드 기본 개념▪전 세계의 문자를 특정 번호를 매겨서 테이블로 관리 ( 코드 포인트 )

▪ U+0041U+ : Unicode0041 : 코드 포인트 값 (16 진수 )

▪코드 포인트 값은 단순한 일렬번호가 아니라 문자 범위 별로 여러 블록으로 쪼개져 있음 .

28

Page 29: 전영규 유니코드 세미나_공개용

29

Page 30: 전영규 유니코드 세미나_공개용

UCS 테이블 구조

30

용어 의미 Cell 한 개의 문자가 할당 Plane 256 X 256 (=65,536) cell 묶음 (plane 00 ~ plane FF)

Group 256 개의 Plane 의 묶음 (Group 00 ~ Group7F)

전체 128 Groups X 256 Planes X 65,536 Cells = 약 20억

Page 31: 전영규 유니코드 세미나_공개용

유니코드 체계 ▪Unicode 는 UCS 서브셋▪Group00 의 Plane00 ~ Plane16 까지

( 17 개 )

▪17 Planes * 65536 = 약 100 만개

31

Page 32: 전영규 유니코드 세미나_공개용

유니코드 Plane

32

근대문자 음악 , 수학기호 한중일 통합 한자 문자 없음 제어용 문자 사용자 영역

BMP : Base Multilingual PlaneSMP : Supplementary Multilingual PlaneSIP : Supplementary Ideographic PlaneTIP : Tertiary Ideographic PlaneSSP : Supplementary Special-purpose PlanePUA : Private Use Area

Page 33: 전영규 유니코드 세미나_공개용

• 알파벳 ‘ A’

• 한글 ‘가’

• 음표• plane 번호 5bit + Cell 번호 16 bit = 21bit

유니코드 코드 포인트

33

Page 34: 전영규 유니코드 세미나_공개용

34

한글 소리마디

Page 35: 전영규 유니코드 세미나_공개용

35

한글 자모

Page 36: 전영규 유니코드 세미나_공개용

유니코드 인코딩▪코드 포인트를 바이트 코드로 표현▪UTF (UCS Transformation Format)

▪UTF-32

▪UTF-16

▪UTF-836

Page 37: 전영규 유니코드 세미나_공개용

• 모든 코드 포인트가 32 비트로 1:1 매핑• 남는 11 개 비트는 0 으로 채워짐• 4byte 고정길이 , 메모리 낭비가 심해 거의 사용 되지 않음• ISO UCS-4 와 동일

UTF-32

37

Page 38: 전영규 유니코드 세미나_공개용

UTF-16

▪많이 사용되는 현대 문자의 99% 가 BMP영역 (즉 대다수가 2byte 임 )

▪UTF-32 보다 저장 공간이 적음▪2, 4 바이트 가변 길이 인코딩▪ISO UCS-2 와 동일

38

Page 39: 전영규 유니코드 세미나_공개용

Surrogate Code points

▪초기 유니코드는 16bit character set 였기 때문에 모든 문자 표현하기 역부족▪남아 있는 코드 포인트를 확장▪Surrogate( 대리 영역 ) 을 만들었음

High Surrogate U+D800 ~ U+DBFFLow Surrogate U+DC00 ~ U+DFFF

▪UTF-16 에서 사용됨39

Page 40: 전영규 유니코드 세미나_공개용

UTF-16

▪ BMP(Plane00) 에 해당하는 문자는 5bit 를 생략하므로 5bit 제거하고 16bit 로 1:1 매핑

40

• BMP 영역을 벗어나는 문자는 32bit 로 (4byte) 인코딩- U+1D160 – U+10000 = D160 (0000 1101 0001 0110 0000)- high 10 bit 0000 1101 00- low 10 bit 01 0110 0000- U+D800(high surrogate) + U+34(high 10 bit) = U+D834 - U+DC00(low surrogate) + U+160(low 10 bit) = U+DD60- D834 DD60

Page 41: 전영규 유니코드 세미나_공개용

UTF-8

▪UTF-16 은 ASCII 마저도 2byte 이지만UTF-8 ASCII 1byte

▪가장 많이 사용되는 인코딩▪BMP 영역 1-3 byte

▪BMP 외 영역 4 byte41

Page 42: 전영규 유니코드 세미나_공개용

UTF-8 인코딩

42

0000-007F

0080-07FF

0800-FFFF

BMP(Plane00)

Page 43: 전영규 유니코드 세미나_공개용

UTF-8 인코딩

43

Plane01- Plane16

Page 44: 전영규 유니코드 세미나_공개용

Java modified utf-8▪Java String 에서 사용하는 인코딩은

UTF-16(Big-Endian)▪문자열 전송 / 수신을 위해서 직렬화 할 경우는 Modified

UTF-8 사용▪U+0000 2byte encoding▪BMP 영역 UTF-8 영역과 동일▪Supplementary 영역은 UTF-16 처럼 surrogate

pair 를 만들어 각각 UTF-8 인코딩 ( 각각 3byte, 전체 6byte)

44

6byte2byte

BMP(Plane00)

Page 45: 전영규 유니코드 세미나_공개용

BOM

▪ 유니코드에서 Big-Endian, Little-Endian 구별하기 위해▪ 컴퓨터 메모리와 같은 1차원 공간에서 여러 개의 연속된 대상을 배열 하는 방법

45

Encoding 표현UTF-16 BE FE FF

UTF-16 LE FF FE

UTF-32 BE 00 00 FE FF

UTF-32 LE FF FE 00 00

Page 46: 전영규 유니코드 세미나_공개용

SUMMARY

▪ASCII -> Extended ASCII -> ISO 8859 Series

▪한글처리 조합형 / 완성형▪KSC5601-1987 이 재정이 되었지만 현대 한글 표현하지 못함▪확장 MS949 가 출시 되어 한글 표준을 외산 업체가 정한거나 마찬가지▪여러 문자들을 표현하기 유니코드 탄생

46

Page 47: 전영규 유니코드 세미나_공개용

47

출력결과??÷¸? ?¸°? ¿? ?½?¸?°? ?´?¸® ?¹æ°????차를 타고 온 ? 시맨과 ? 다리 ? 방각하

출력결과ªB?÷¸? ?¸°? ¿? ¼?½?¸?°? ?º´?¸® ?c¹æ°???찦차를 타고 온 펲시맨과 쑛다리 똠방각하

EUC-KR, MS949 호환성