Download presentation
Presentation is loading. Please wait.
1
유니코드의 다양한 이해 Samsung Software Membership – 22기 백재현
2
Contents 본인 소개(인터넷 업로드 본에서는 제외) 면접 작품 소개 세미나 목표 및 목적 세미나 참고 문헌 및 사이트
질의 응답
3
세미나 목표 및 목적 최종 사용자. “이런 한글 깨지네.” Unicode에 대해 전혀 모르는 개발자. 유니코드 전문가
UTF-8을 쓰니 Unicode 완비되었다고 생각하는 사람. 세상에는 여러 종류의 인코딩이 존재하고 있다는 것을 아는 사람. UTF-8이 곧 Unicode가 아니라는 것을 아는 사람. Unicode에 여러 평면이나 카테고리, 스크립트 등의 분류가 존재한다는 것을 알고 있다 유니코드 전문가 유니코드 이해의 다양한 단계들 by 홍민희의 블로그
4
세미나 목표 및 목적 UCS2 BMP 멀티바이트 KSC5601 유니코드 CP949 SBCS i18n UCS4 BOM
Encoding UTF-8 UTF-16
5
세미나 Character Set Encoding Codepage
문자의 집합. 문자에는 숫자 코드가 부여되는데, 캐릭터 셋이라 하면 컴퓨터 상에 어떻게 표현되는가 까지는 정해지지 않은 상태. Encoding 캐릭터 셋이 컴퓨터상에서 어떻게 표현되는지 까지 정해진 상태의 문자의 집합. EUC_KR, SHIFT_JIS … Codepage IBM에서 쓰던 말. 인코딩과 같은 맥락. MS에서 DOS를 만들 때 IBM 과 같이 만들었는데 덕분에 MS에서도 Codepage 라는 말을 많이 씀
6
세미나 Single Byte Character Set (SBCS) Wide Byte Character Set (WBCS)
예를 들면 1바이트로 표현 가능한 ASCII는 SBCS Wide Byte Character Set (WBCS) 모든 문자를 2바이트로 표현하는 캐릭터 셋 Multi Byte Character Set (MBCS) 가변 길이 캐릭터 셋. 상황에 따라 1바이트 이상 사용.
7
세미나 ASCII 7비트를 사용한 인코딩 33개의 출력 불가능한 제어 문자들 95개의 출력 가능한 문자들
8
세미나 Codepage 문자 인코딩을 위해 쓰이던 전통적인 IBM 용어
7bit인 ASCII에 1bit 더 붙여서 1Byte를 다 사용함.
9
세미나 i18n internationalization l10n localization
10
세미나 i18n l10n
11
너무 많아!! = = = 세미나 CP437 CP860 CP932 CP949 UTF-8 Original IBM Codepage
포르투갈어 너무 많아!! CP932 일본어 CP949 한국어 UTF-8 = IBM CP1208 = MS CP65001 = SAP CP4110
12
“이 세상의 모든 문자를 담자” 세미나 UCS2 UCS4 1991년 10월 i18n을 위해 만들어짐.
일반적으로 사용. 모두 2byte 산스크리트어, 옛이집트고어 등등 포함.
13
세미나 BMP 0x0000부터 0xFFFF 까지 BMP(Basic Multilingual Plane)
14
세미나 USC-2 영역 UCS용 인코딩 방법으로 ISO 10646이 정의. 축약하여 UCS2.
한글 USC-2 영역 UCS용 인코딩 방법으로 ISO 10646이 정의. 축약하여 UCS2. 각 글자들을 0~65535(0xFFFF)에 매김. BMP영역을 표현 가능.
15
세미나 BMP 중 한글 각 0xAC01( ) 쀍 0xC00D( )
16
? 세미나 BMP를 표현하기 UTF-8 1~3byte를 사용하여 BMP를 모두 표현 가능 UTF-16
17
세미나 Plane USC-4 영역
18
세미나 BMP외의 영역 0x10000~0x1FFFF SMP 0x20000~0x2FFFF SIP 0x30000~0xDFFFF
CJK Unified Ideographs SMP 0x10000~0x1FFFF 고대 script, 음악 및 수학 기호 SIP Unassigned 0x30000~0xDFFFF Unassigned 0xE0000~ SSP, Private Use Area Planes 그 외
19
세미나 Scripts 스크립트의 분류 000–099 Hieroglyphic and cuneiform scripts
100–199 Right-to-left alphabetic scripts 200–299 Left-to-right alphabetic scripts 300–399 Alphasyllabic scripts 400–499 Syllabic scripts 500–599 Ideographic scripts 600–699 Undeciphered scripts 700–799 Shorthands and other notations 800–899 (unassigned) 900–999 Private use, alias, special codes
20
세미나 UTF-8 1. 1바이트로 표시된 문자의 최상의 비트는 항상 0
2. 2바이트 이상으로 표시된 문자의 경우, 첫 바이트의 상위 비트들이 그 문자를 표시하는 데 필요한 바이트 수를 결정한다. 예를 들어서 2바이트는 110으로 시작하고, 3바이트는 1110으로 시작한다. 3. 첫 바이트가 아닌 나머지 바이트들은 상위 2비트가 항상 10이다. 4. 기존의 ASCII로 짜여진 프로그램의 경우 UTF-8을 사용하면 아무 문제 없이 동작 가능하다.
21
세미나 UTF8과 UTF16으로 표현하기 코드범위 UTF-16 표현 UTF-8 표현 설명 000000~00007F
0xxxxxxxx 0xxxxxxx ASCII와 동일한 범위 000080~0007FF 00000xxx xxxxxxxx 110xxxxx 10xxxxxx 첫바이트 110 또는 1110로 시작 바이트들은 10으로 시작 000800~00FFFF xxxxxxxx xxxxxxxx 1110xxxx 10xxxxxx 10xxxxxx 010000~10FFFF 110110yy yyxxxxxx xx xxxxxxxx 11110zzz 10zzxxxx 10xxxxxx 10xxxxxx UTF-16 서로게이트 쌍 영역 (yyyy = zzzzz - 1). UTF-8로 표시된 비트 패턴은 실제 코드 포인트와 동일하다.
22
세미나 ‘삼’을 UTF-8, 16으로 어떻게? UTF-16 UTF-8 : 0xC0BC
000800~00FFFF xxxxxxxx xxxxxxxx 1110xxxx 10xxxxxx 10xxxxxx 첫바이트 110 또는 1110로 시작 바이트들은 10으로 시작 UTF-16 : 0xC0BC UTF-8 : 0xC0BC = = EB 82 BC
23
세미나 UTF-16 인코딩 예제 몇가지 Z(0x7A) 水(0x6C34) 높은 음자리표(0x1D11E) UTF-16 표현
코드범위 UTF-16 표현 000000~00007F 0xxxxxxxx 000080~0007FF 00000xxx xxxxxxxx 000800~00FFFF xxxxxxxx xxxxxxxx 010000~10FFFF 110110ZZ ZZxxxxxx 110111yy yyyyyyyy Z(0x7A) : 0x007A 水(0x6C34) : 0x6C34 높은 음자리표(0x1D11E) High Surrogate : 0x1D11E = Low Surrogate zzzzz : ∴ZZZZ : 00000 xxxxxx : yyyyyyyyyy : High-Surrogate : (0xD834) Low-Surrogate : (0xDD1E) ∴ D834 DD1E 0x010000이상의 경우 | z z z z z | x x x x x x y y | y y y y y y y y 로 나타남. (ZZZZ = zzzzz - 1)
24
세미나 CP949 to Unicode
25
세미나 Unicode to CP949
26
세미나 BOM 유니코드에서 엔디안을 구별하기 위해 사용 되는 문자. U+FEFF
Encoding Representation UTF-8 EF BB BF UTF-16 BE FE FF UTF-16 LE FF FE UTF-8에서는 엔디안 문제가 일어나지 않으므로 BOM을 넣을 필요가 없지만 해당 자료가 UTF-8 인코딩이라는 표식으로 사용하는 경우도 있다. 마이크로소프트 윈도우의 많은 문서 편집기가 UTF-8로 저장할 경우 자동으로 문서의 앞부분에 BOM을 추가한다. 따라서 BOM을 인식하지 못하는 다른 문서 편집기에서 윈도우에서 제작한 문서를 읽어 들일 때 잘못된 처리를 하는 경우가 종종 있다.
27
세미나 응용 – 한글 초성 검색 알고리즘 구현 boolean matchString(String 검색대상, String 검색어); matchString(“삼성소프트웨어멤버십”, “ㅅㅅ소프트웨ㅇㅁ”); -> TRUE matchString(“삼성소프트웨어멤버십”, “ㅅㅍㅌㅇㅇ”); -> TRUE matchString(“삼성소프트웨어멤버십”, “소프트웨얼”); -> FALSE
28
세미나 초성 검색 알고리즘 – 메소드 boolean isInitialSound(char searchar) : searchar(문자)가 자음인지 검사한다. char getInitialSound(char c) : c(문자)의 자음을 얻는다. boolean isHangul(char c) : 해당 문자가 한글인지 검사.
29
세미나 초성 검색 알고리즘
30
세미나 초성 검색 알고리즘
31
세미나 초성 검색 알고리즘
32
세미나 초성 검색 알고리즘
33
세미나
34
세미나 개발하며 겪었던 애로사항들 1. 유니코드 인코딩을 한 DLL을 멀티바이트 프로그램에서 사용하려 할 때 : 이유도 모르고 하루를 그냥 날림. 2. 멀티바이트 프로그램에서 일본어와 중국어를 지원하기 위해 한글 윈도우에서 일본어와 중국어를 복사 붙여넣기 하였는데, 실제 일본 윈도우와 중국 윈도우에서 글씨가 깨져서 꿿뜛긄쳸 같은 글씨로 나옴. : CP949에도 어느 정도 일본어, 한문을 제공한다. 이게 마치 다른 언어 윈도우에서도 보여질 것 같지만 전혀 그렇지 않다. 3. 서로 다른 기종 간에 씨리얼 통신 등으로 한글 스트링을 보냈는데 리시브 한 곳에서 보니 한글이 다 깨져있는 경우 : 이 경우는 인코딩도 생각해 볼 수 있고 Endian 문제도 생각해 볼 수 있다.
35
세미나 하고 싶은 말 1. 어? 한글이 깨졌네?에서 세부 내용을 아는 프로그래머로!
2. 프로그램을 짤 때는 i18n을 고려하여 설계하도록 하고, 사용 인코딩은 웬만하면 유니코드로 하도록 한다. 요새 웬만한 플랫폼은 다중언어환경을 제공하도록 여러 리소스를 사용할 수 있도록 지원한다. 3. 라이브러리가 지원한다고 그냥 갖다 쓰기보다는 내부적으로 어떻게 돌아가는지 호기심을 갖고 살펴보면 좋을 것 같다.
36
세미나 UCS2 BMP 멀티바이트 KSC5601 유니코드 CP949 SBCS i18n UCS4 BOM Encoding
UTF-8 UTF-16
37
질의응답
38
Thank you
Similar presentations