UNICODE Seminar – 한국에서 프로그래머 하기
-
Upload
lenore-holder -
Category
Documents
-
view
136 -
download
0
description
Transcript of UNICODE Seminar – 한국에서 프로그래머 하기
![Page 1: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/1.jpg)
UNICODE Seminar –UNICODE Seminar –
한국에서 프로그래머 하기한국에서 프로그래머 하기
2005.11.22By bleujin
![Page 2: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/2.jpg)
Global Global Software?Software?
1 / 261 / 26
영역영역 (Territory)(Territory) 별 지원별 지원
달력 설정 방법달력 설정 방법- - 첫번째 요일첫번째 요일- - 첫번째 주첫번째 주
날짜 포맷날짜 포맷- 05/08/10 - 05/08/10 - May.8.2005- May.8.2005- - 中華民國中華民國 9494 年年 0707 月月 2121 日 日
통화 기호통화 기호- W, Kč, $, Dual Currency- W, Kč, $, Dual Currency
숫자그룹숫자그룹- 2,0000.00- 2,0000.00- 20,000.00- 20,000.00- 20.000,00- 20.000,00
![Page 3: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/3.jpg)
Global Global Software?Software?
2 / 262 / 26
언어언어 (Language)(Language) 적 지원적 지원
캐릭터 셋캐릭터 셋- KO16MSWIN949, KO16KSC5601- KO16MSWIN949, KO16KSC5601
정렬방식정렬방식- Linguistic Sorting(KOREAN_M)- Linguistic Sorting(KOREAN_M)
날짜 표기에 사용되는 기호날짜 표기에 사용되는 기호- month, day, day of week, year- month, day, day of week, year
에러메시지 및 번역에러메시지 및 번역
![Page 4: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/4.jpg)
ExampleExample
3 / 263 / 26
ExampleExample
인코딩인코딩 , , 디코딩디코딩
Content-type in HTML, ISO-8859-1?, ISO-8859-5Content-type in HTML, ISO-8859-1?, ISO-8859-5
이메일이메일 (( 웹웹 )) 이 이 ????? ????? 보여요보여요 , , 글자가 깨졌어요글자가 깨졌어요 ....
request.getParam(“val”).getBytes(“euc-kr”), request.getParam(“val”).getBytes(“euc-kr”), (new FileWriter(“aaa.txt”)).writeln(“abc”)(new FileWriter(“aaa.txt”)).writeln(“abc”)
조합형 한글와 완성형 한글조합형 한글와 완성형 한글 ??
UTF8? Unicode? ALUTF32, UCS-2, UTF16, UTF32??? UTF7 ???UTF8? Unicode? ALUTF32, UCS-2, UTF16, UTF32??? UTF7 ???
Code947, i18n, L10NCode947, i18n, L10N
?c?c 각하각하 , , 아아 ????
NLS-Lang?? KO16MSWIN949, KO16KSC5601NLS-Lang?? KO16MSWIN949, KO16KSC5601
![Page 5: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/5.jpg)
Legend Of ASCIILegend Of ASCII 왜 왜 1byte1byte 는 는 8bit 8bit 인가인가 ??
1byte -> 8bit -> 2^8 -> 2561byte -> 8bit -> 2^8 -> 2562byte -> 16bit -> 2^16 -> 65536 2byte -> 16bit -> 2^16 -> 65536
![Page 6: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/6.jpg)
Legend Of ASCIILegend Of ASCII OEMOEM
- OEM - OEM 문자 문자 (127)(127)- Code Page (win98, cp437, cp949)- Code Page (win98, cp437, cp949)- DBCS(- DBCS( 아시아권아시아권 ))
AASCIISCII 의 문제의 문제
5 / 265 / 26
![Page 7: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/7.jpg)
Myth of UnicodeMyth of Unicode
6 / 266 / 26
유니코드 야사유니코드 야사
세계의 모든 문자를 표현할 수 있는 코드 체계를 만들자세계의 모든 문자를 표현할 수 있는 코드 체계를 만들자- - 영어 알파벳 몇백자영어 알파벳 몇백자 , , 한글 한글 11 만자만자 , , 한자 한자 22 만자만자 ....- - 모두 합쳐도 모두 합쳐도 66 만자도 안되겠네만자도 안되겠네 ....- BMP(Basic Multilingual Plane) - BMP(Basic Multilingual Plane) - Unicode 3.0 - Unicode 3.0 이하이하
세상일은 그리 만만하지 않다세상일은 그리 만만하지 않다 -_--_-- - 한글 고어한글 고어 , , 옛 한자옛 한자- SP(Supplementary Planes)- SP(Supplementary Planes) 를 정의를 정의
- 1024 * 1024 = 10- 1024 * 1024 = 10ex) ex) 한자는 추가적으로 약 한자는 추가적으로 약 44 만자만자
유니코드 콘소시엄 유니코드 콘소시엄 + + 세계 표준기구세계 표준기구 (ISO)(ISO)- 1991- 1991 년 이후 동일한 표준년 이후 동일한 표준- ISO / IEC 10646- ISO / IEC 10646
![Page 8: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/8.jpg)
Myth of UnicodeMyth of Unicode
7 / 267 / 26
유니코드 유니코드 3.13.1 에 정의된 언어 영역 에 정의된 언어 영역 (List of block names for Unicode Standard 3.1) (List of block names for Unicode Standard 3.1)
http://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html#misleadhttp://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html#mislead
유니코드의 구조는 유니코드의 구조는 1717 개의 언어판으로 구성개의 언어판으로 구성- 1- 1 개의 기본 언어판 개의 기본 언어판 + 16+ 16 개의 보충 언어판개의 보충 언어판- 17 * 65536 = 114112- 17 * 65536 = 114112 개 개 - 2048- 2048
![Page 9: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/9.jpg)
Myth of UnicodeMyth of Unicode
8 / 268 / 26
유니코드 용어유니코드 용어
- 기본언어판 , BMP
BMP 는 Basic Mulitilingual Plane 의 약자입니다 . 유니코드의 첫 65,536 개의 코드를 의미합니다 .
- 언어판 , Plane
256x256 즉 65,536 개씩의 코드 묶음을 이릅니다 . 유니코드에서는 현재 17 개의 언어판을 사용할 수 있습니다 . 모두 그룹 00 에 포함됩니다 .
- 언어판 그룹 , Group
256 개씩의 언어판을 묶어 하나의 그룹으로 명명합니다 . 유니코드의 17 개 언어판은 모두 Group 00 에 있습니다 . 유니코드는 17 개의 언어판에 한정되어 정의됩니다 . 반면 ISO 표준 (UCS-4) 에서는 모두 128 개의 언어판 그룹이 정의될 수 있습니다 .
- 1 Plane = 65,536 code points - 1 Group = 256 planes = 256x65,536 = 16,777,216 code points - UCS-4 = 128 groups = 128x16,777,216 = 2,147,483,648 code points
![Page 10: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/10.jpg)
Myth of UnicodeMyth of Unicode
9 / 269 / 26
유니코드 용어유니코드 용어
- 인코딩 , Encoding 문자집합을 표현하는 방식을 말합니다 . 유니코드는 코드체계 또는 문자집합을 명명하는 것이며 이를 표현하기 위해서는 UTF-8, UTF-16, UTF-32 등과 같은 인코딩이 필요합니다 .
UCS-2: Universal Character Set 2(octets) 좀더 정확하게는 Universal Multipe-Octet Coded Character Set 2 입니다 . ISO/IEC 10646 의 용어로 BMP 의 65,536 코드를 정의하며 , 2 바이트로 표현됩니다 . 1 개의 언어판 , 즉 BMP 만이 이에 해당합니다 . UCS-2 는 인코딩 방법이 아니며 문자코드 자체입니다 . 인코딩으로 봐도 무방하겠군요 . 여기서 octet 이라는 용어를 사용했는데 이 용어는 ISO 쪽에서 사용하는 용어로 , 유니코드 진영에서 사용하는 바이트와 같은 뜻입니다
UCS-4: Universal Character Set 4(octets) ISO/IEC 10646 의 용어로 4 바이트로 표현됩니다 . 모두 128 개의 언어판 그룹 , 즉 128*256 언어판 = 32,768 언어판을 정의합니다 . 이는 대략 231 = 2,147,483,648 개의 코드에 해당합니다 . UCS-4 는 인코딩 방법이 아니며 문자코드 자체입니다 .
![Page 11: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/11.jpg)
Myth of UnicodeMyth of Unicode
10 / 10 / 2626
유니코드 용어유니코드 용어
UTF-8: UCS Transformation Format, 8-bit form Unicode 표준의 인코딩 방식중의 하나입니다 . 표준에서는 17 개 언어판의 문자만을 표현할 수 있으나 기술적으로는 UCS-4 전영역의 문자를 표현할 수 있습니다 . 문자에 따라 1 ~ 4( 또는 6) 바이트로 표현됩니다 .
UTF-16: UCS Transformation Format, 16-bit form 유니코드 3.0 에서는 16 을 16 비트로 해석한 것이 아니라 , 그룹 00 의 16 개 언어판이라고 써 놓았군요 . UTF-32 의 32 가 32 비트를 지칭하므로 통일성을 위해 16 비트로 이해하시는 게 좋습니다 . 16 비트로 표현한다는 점에서는 UCS-2 와 흡사하지만 대행문자영역 (Surrogates) 을 이용하여 16 개의 보충 언어판 코드를 표현할 수 있는 인코딩입니다 . 대행문자영역 2 개로 16 개의 보충 언어판을 표현할 수 있습니다 . UCS-2 에서는 65536 개의 코드만을 정의할 수 있으나 UTF-16 에서는 1 백만여자를 더 표현할 수 있습니다 .
UTF-32: UCS Transformation Format, 32-bit form 32 비트 즉 4 바이트로 각 문자를 표현합니다 . 이점에서 UCS-4 와 동일하지만 17 개의 언어판만을 정의한다는 점에서는 UCS-4 의 부분집합으로 간주하면 됩니다 . UCS-4 와 동일하나 0x00000000 ~ 0x0010FFFF 범위만을 문자코드로 간주한다고 이해하시면 됩니다 .
![Page 12: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/12.jpg)
Myth of UnicodeMyth of Unicode
11 / 11 / 2626
유니코드 인코딩유니코드 인코딩
유니코드에서 지원하는 인코딩 방식은 UTF-8, UTF-16, UTF-32 의 세가지 방식입니다 . UTF 는 UCS Transformation Format 의 약자이며 , 뒤에 붙은 숫자는 인코딩에 사용되는 단위의 비트수를 의미합니다 . 즉 UTF8 은 8 비트 단위 , UTF16 은 16 비트 단위 , UTF32 는 32 비트 단위로 문자를 표현합니다 .
세가지 방식의 공통점이라면 16 개의 보충언어판에 위치한 1,048,576 개의 코드를 표현할 때는 4 바이트를 사용한다는 점입니다 .
하지만 그 방식은 모두 다릅니다 . UTF8 은 4 개의 바이트로 , UTF16 은 2 개의 16 비트로 , UTF32 는 1 개의 32 비트 단위로 표현합니다 .
이제 각 인코딩 방식에 대해 좀더 상세하게 설명하겠습니다 .
![Page 13: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/13.jpg)
Myth of UnicodeMyth of Unicode
12 / 12 / 2626
유니코드 인코딩 유니코드 인코딩 – – UTF16UTF16
UCS-2UCS-2 와 거의 동일합니다와 거의 동일합니다 . . 이 인코딩의 기본 단위는 이 인코딩의 기본 단위는 1616 비트비트 , , 즉 즉 22 바이트입니다바이트입니다 . . 대행문자 영역 대행문자 영역 2,0482,048 개를 제외한 개를 제외한 63,48863,488 개의 코드를 문자로 사용할 수 있으며개의 코드를 문자로 사용할 수 있으며 (BMP), (BMP), 대행문자 영역 대행문자 영역 22 개의 쌍을 이용하여 개의 쌍을 이용하여 1616 개의 보충언어판에 위치한 개의 보충언어판에 위치한 1,048,5761,048,576 개의 코드를 표현할 수 있습니다개의 코드를 표현할 수 있습니다 . .
대행 문자 대행 문자 22 개의 쌍으로 개의 쌍으로 11 개의 문자를 인코딩한다는 점에서 개의 문자를 인코딩한다는 점에서 UTF-16UTF-16 의 인코딩은 가변적인 인코딩이라고 할 수 있겠군요의 인코딩은 가변적인 인코딩이라고 할 수 있겠군요 . . 즉 기본언어판의 문자는 즉 기본언어판의 문자는 22 바이트로 보충언어판의 문자는 바이트로 보충언어판의 문자는 44 바이트로 인코딩됩니다바이트로 인코딩됩니다 . .
이러한 인코딩 방식때문에 이러한 인코딩 방식때문에 UTF-16UTF-16 에서는 에서는 유니코드 표준에서 지원하는 유니코드 표준에서 지원하는 1717 개의 언어판 코드만 표현이 가능합니다개의 언어판 코드만 표현이 가능합니다 . . 가장 유니코드다운 인코딩이라고 할 수 있겠군요 가장 유니코드다운 인코딩이라고 할 수 있겠군요 :-) :-)
UTF-16UTF-16 에서는 상위대행코드가 나타나면 반드시 뒤이어 하위대행코드가 따라와야 합니다에서는 상위대행코드가 나타나면 반드시 뒤이어 하위대행코드가 따라와야 합니다 . . UCS-2UCS-2 에서는 그렇지 아니한 점이 에서는 그렇지 아니한 점이 UTF-16UTF-16 과 과 UCS-2UCS-2 의 차이점입니다의 차이점입니다 . .
![Page 14: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/14.jpg)
Myth of UnicodeMyth of Unicode
13 / 13 / 2626
유니코드 인코딩 유니코드 인코딩 – – UTF8UTF8
UCS-4 UTF-8
0x00000000 - 0x0000007F 0xxxxxxx
0x00000080 - 0x000007FF 110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x00200000 - 0x03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 - 0x7FFFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
UTF-16UTF-16 의 문제 의 문제 - null byte- null byte
-> -> 소프트웨어 재개발소프트웨어 재개발- - 저장 공간의 문제저장 공간의 문제
-> DB -> DB 설계 다시설계 다시- - 대안 대안 : UTF8 : UTF8
- - 중간 바이트에서 중간 바이트에서 00 이 나타나지 않도록이 나타나지 않도록 ))- 1byte- 1byte 에서 에서 4byte4byte 의 가변 바이트의 가변 바이트
![Page 15: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/15.jpg)
Myth of UnicodeMyth of Unicode
14 / 14 / 2626
유니코드 인코딩 유니코드 인코딩 – – UTF32UTF32
UTF-32UTF-32 는 는 3232 비트비트 , , 즉 즉 44 바이트로 모든 유니코드 문자를 표현합니다바이트로 모든 유니코드 문자를 표현합니다 . . UTF-8UTF-8 과 과 UTF-16UTF-16 에 대비해서 고정길이 인코딩이라고 할 수 있겠군요에 대비해서 고정길이 인코딩이라고 할 수 있겠군요 . . 44 바이트 단위로 표현한다해서 바이트 단위로 표현한다해서 UCS-4UCS-4 와 동일하게 볼 수는 없습니다와 동일하게 볼 수는 없습니다 . .
1717 개의 언어판만을 대상으로 하는 개의 언어판만을 대상으로 하는 UCS-4UCS-4 의 부분집합이라고 보시면 됩니다의 부분집합이라고 보시면 됩니다 (( 표준상 그렇습니다표준상 그렇습니다 ). ). 즉 즉 UTF-32UTF-32 의 인코딩 영역은 의 인코딩 영역은 0x000000000x00000000 에서 에서 0x0010FFFF0x0010FFFF 로 제한되어야 합니다로 제한되어야 합니다(( 이 제한을 무시하면 이 제한을 무시하면 UCS-4UCS-4 와 동일합니다와 동일합니다 ).).
Byte Order Mark Byte Order Mark (ex 0x4E00 b:-, l:N)(ex 0x4E00 b:-, l:N)
구분 Little-endian Big-endian
UTF-16 0xFFFE 0xFEFF
UTF-32 0x0000FFFE 0x0000FEFF
플랫폼 Intel, DEC/Alpha 프로세서 RISC 프로세서 , Microprocessor
운영체제 MS Window, 리눅스 /인텔 Unix, Mac OS
![Page 16: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/16.jpg)
CAMEL CAMEL PROGRAMMERPROGRAMMER
15 / 15 / 2626
한글 한글 한글한글 한글 한글……
일반 텍스트일반 텍스트 ??- - 가가 가가가가 가가 ??
제 웹사이트가 깨져 보여요제 웹사이트가 깨져 보여요- Content-type: text/plain; charset=“utf-8”- Content-type: text/plain; charset=“utf-8”- Explorer - Explorer 언어 추측언어 추측- - 언어의 언어의 UCS-2UCS-2
java, c++, c#java, c++, c#phpphp
조합형 한글 조합형 한글 vs vs 완성형 한글완성형 한글- 1 + 2^5 + 2^5 + 2^5- 1 + 2^5 + 2^5 + 2^5- - 아래한글과 아래한글과 MSMS 워드의 싸움워드의 싸움
![Page 17: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/17.jpg)
오라클 오라클 NLSNLS
16 / 16 / 2626
SetupSetup
위 창은 한국어 저장 여부하고는 아무 위 창은 한국어 저장 여부하고는 아무 Never Never 절대 상관이 없다절대 상관이 없다 ..- - 번역된 메시지번역된 메시지- - 폰트폰트- - 로케일정보로케일정보
![Page 18: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/18.jpg)
오라클 오라클 NLSNLS
17 / 17 / 2626
올바른 캐릭터 셋을 선택하자올바른 캐릭터 셋을 선택하자
올바른 캐릭터셋이라 함은 한글을 저장할 수 있는 캐릭터 셋을 말한다올바른 캐릭터셋이라 함은 한글을 저장할 수 있는 캐릭터 셋을 말한다 ..
정해진 캐릭터 셋을 가지고 있지 않은 데이터베이스에 결코 한글 데이터를 저장할 수 없다정해진 캐릭터 셋을 가지고 있지 않은 데이터베이스에 결코 한글 데이터를 저장할 수 없다 ..
이제 이제 US7ASCIIUS7ASCII 와는 헤어질때다와는 헤어질때다 ..- KO16KSC5601- KO16KSC5601- KO16MSWIN949- KO16MSWIN949- UTF8- UTF8- AL32UTF8- AL32UTF8
![Page 19: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/19.jpg)
오라클 오라클 NLSNLS
18 / 18 / 2626
KO16KSC5601KO16KSC5601
한글 완성형 코드와 일치한글 완성형 코드와 일치 ( 2350( 2350 한글한글 (25*94), 4888(25*94), 4888 자의 한자자의 한자 , , 히라카나히라카나 , , 카타카나카타카나 , , 영문영문 , , 기호 등기호 등 ))UNIX (Lang=ko) defaultUNIX (Lang=ko) default
하지만하지만 ~~~ KO16KSC5601 ~~~ KO16KSC5601 캐릭터 셋 사용은 자제하라캐릭터 셋 사용은 자제하라……
아아햏햏햏햏모두에게 모두에게 먄먄하게 되었소하게 되었소 . . 솔솔믜믜가 예약했던 커피가 예약했던 커피숖숖이 배신을 때리는 바람에 이 배신을 때리는 바람에 그만 낙동강 오리알이 되었지요그만 낙동강 오리알이 되었지요 . . 정말 정말 먄먄하오하오 ..
똠똠방각하방각하
아아 ? ?? ?모두에게 모두에게 ??하게 되었소하게 되었소 . . 솔솔 ??가 예약했던 커피가 예약했던 커피 ??이 배신을 때리는 바람에 이 배신을 때리는 바람에 그만 낙동강 오리알이 되었지요그만 낙동강 오리알이 되었지요 . . 정말 정말 ??하오하오 ..
??방각하방각하
![Page 20: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/20.jpg)
오라클 오라클 NLSNLS
19 / 19 / 2626
KO16MSWIN949KO16MSWIN949
Windows-949 Windows-949 캐릭터셋은 마이크로소프트사의 캐릭터셋은 마이크로소프트사의 Windows Codepage 949Windows Codepage 949 번번 , , 즉 한글 코드 페이지를 따른 코드셋이다 즉 한글 코드 페이지를 따른 코드셋이다
다른 운영 체제에서도 사용할 수 있다다른 운영 체제에서도 사용할 수 있다 !"!"
완성형완성형 (KO16KSC5601)(KO16KSC5601) 을 그대로 포함하고 있으며을 그대로 포함하고 있으며 , , 추가로 현대 한글 조합으로 표현할 수 있는 모든 가짓수에 해당하는추가로 현대 한글 조합으로 표현할 수 있는 모든 가짓수에 해당하는 88228822 자의 한글을 추가해 포함하고 있다자의 한글을 추가해 포함하고 있다 . . 그러니까 그러니까 "Windows-949 "Windows-949 캐릭터셋은 캐릭터셋은 KSC5601KSC5601 의 수퍼셋의 수퍼셋 (Superset)"(Superset)" 이 되며이 되며 , , 따라서 따라서 "KO16MSWIN949 "KO16MSWIN949 또한 또한 KO16KSC5601KO16KSC5601 의 수퍼셋의 수퍼셋 " " 이다이다
![Page 21: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/21.jpg)
오라클 오라클 NLSNLS
20 / 20 / 2626
UTF8/AL32UTF8UTF8/AL32UTF8
UTF8UTF8 은 유니코드를 구현한 캐릭터셋 중에 가변길이 인코딩 방식을 택하고 있는 캐릭터셋이다은 유니코드를 구현한 캐릭터셋 중에 가변길이 인코딩 방식을 택하고 있는 캐릭터셋이다 . . 자세한 인코딩 방식은 여기에서 논할 필요가 없지만자세한 인코딩 방식은 여기에서 논할 필요가 없지만 , , 가변 길이를 위해 일종의 플래그 비트를 각 바이트마다 포함시켜야 하다보니가변 길이를 위해 일종의 플래그 비트를 각 바이트마다 포함시켜야 하다보니 , , 한 글자를 표한하는데 필요한 바이트의 길이가 한 글자를 표한하는데 필요한 바이트의 길이가 최대 최대 33 바이트바이트 (AL32UTF8(AL32UTF8 의 경우 의 경우 66 바이트바이트 )) 까지 늘어날 수 있다까지 늘어날 수 있다 . .
유니코드는 잘 알려진 바와 같이 유니코드는 잘 알려진 바와 같이 현대 한글 현대 한글 1117211172 자를 모두 가나다 순으로 잘 정렬된 상태로 포함하고 있다자를 모두 가나다 순으로 잘 정렬된 상태로 포함하고 있다 . . 그래도 한글 한 자가 그래도 한글 한 자가 33 바이트의 물리적 공간을 차지하므로바이트의 물리적 공간을 차지하므로 , , 오로지 모든 한글을 지원한다는 이유만으로 사용하는 것은 곤란하다오로지 모든 한글을 지원한다는 이유만으로 사용하는 것은 곤란하다 . .
하지만하지만 , , 한글 이외에도 다른 언어들을 함께 데이타베이스에 저장해야 한다면 한글 이외에도 다른 언어들을 함께 데이타베이스에 저장해야 한다면
다른 선택의 여지가 없는 유일한 선택이 된다다른 선택의 여지가 없는 유일한 선택이 된다 ..
![Page 22: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/22.jpg)
오라클 오라클 NLSNLS
21 / 21 / 2626
한글 캐릭터 셋 비교한글 캐릭터 셋 비교
KO16KSC5601 KO16MSWIN949
UTF8 AL32UTF8
한글 지원 한글 2350 2350+ 확장 8822( 총 11172 자 )
한글 11172 자 한글 11172 자
인코딩 버전 한글 완성형 확장은 MS949 에 따라 배열
Unicode2.1, 3.0 Unicode 3.0, 3.1, 3.2, 4.0
한글 바이트 2 byte 2byte 3byte 3byte
지원버전 7.x 8.0.6 이상 8.0 이후 9i R1 이상
Nchar 로 설정가능 불가 불가 가능 불가
한글정렬 단순 바이너리정렬 KOREAN_M, UNICODE_BINARY
한글 : 바이너리한자 : KOREAN_M
장점 없음 2byte 로 모든 한글 입출력 가능
정렬이 효과적 , 다른언어들과 같이 저장되어야 할 경우 다른 대안이 없음
동일
단점 한글 2350가능한 사용자제
완성형과 호환 문제로 글자배열순과 정렬순서가 다름
공간의 소모인코딩 /디코딩 시간
![Page 23: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/23.jpg)
오라클 오라클 NLSNLS
22 / 22 / 2626
자자 . . 이걸 기억하자이걸 기억하자
- - 한글 지원을 위해서는 반드시 위의 네 가지 캐릭터셋 중에 하나를 선택해야 한다 한글 지원을 위해서는 반드시 위의 네 가지 캐릭터셋 중에 하나를 선택해야 한다
- - 한국에서만 사용하는 시스템이라면 한국에서만 사용하는 시스템이라면 KO16MSWIN949KO16MSWIN949 를 선택한다 를 선택한다
- - 한국어 뿐 아니라 중국어한국어 뿐 아니라 중국어 , , 일본어일본어 , , 러시아어 등 다양한 언어로 된 데이타를 저장해야 한다면 러시아어 등 다양한 언어로 된 데이타를 저장해야 한다면 UTF8, AL32UTF8UTF8, AL32UTF8 을 선택한다을 선택한다 . .
- - 대부분이 한글이며대부분이 한글이며 , , ““ 일부일부” ” 컬럼에 외국어가 필요하다면컬럼에 외국어가 필요하다면 , , 한국어 기반의 캐릭터셋한국어 기반의 캐릭터셋 (KO16MSWIN949)(KO16MSWIN949) 을 사용하되을 사용하되 , , National CharactersetNational Characterset 을 이용한 컬럼에 외국어를 저장한다을 이용한 컬럼에 외국어를 저장한다 ..
ex) CREATE TABLE test_tableex) CREATE TABLE test_table( varchar_value VARCHAR2(2000),( varchar_value VARCHAR2(2000),nvarchar_value NVARCHAR2(2000)nvarchar_value NVARCHAR2(2000)););
NLS_LANG NLS_LANG 변수는 데이타베이스에게 사용자의 환경을 알려주는 인식표 역할을 한다변수는 데이타베이스에게 사용자의 환경을 알려주는 인식표 역할을 한다 ..- KOREAN_KOREA.KO16MSWIN949 (in window)- KOREAN_KOREA.KO16MSWIN949 (in window)- AMERICAN_AMERICA.KO16MSWIN949- AMERICAN_AMERICA.KO16MSWIN949- KOREAN_KOREA.KO16KO16KSC5601 (in unix)- KOREAN_KOREA.KO16KO16KSC5601 (in unix)
![Page 24: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/24.jpg)
오라클 오라클 NLSNLS
23 / 23 / 2626
KSC5601KSC5601 에서 지원되지 않는 글자들의 입출력에서 지원되지 않는 글자들의 입출력
-KO16KSC5601 CSKO16KSC5601 CS 에 얼마든지 그런 글자들을 삽입할 수 있던데요에 얼마든지 그런 글자들을 삽입할 수 있던데요 ??- insert into test(a) values(‘insert into test(a) values(‘ 숖’숖’ ) ;) ;- select * from test select * from test
??- NLS_LANGNLS_LANG 를 를 KO16KSC5601KO16KSC5601 로 하면 로 하면 ??
Insert Insert 실패실패숖숖 , , 똠똠 , , 믜믜 , , 뾃뾃 , , 햏햏
-KSC5601 CSKSC5601 CS 의 정렬의 정렬- 한글한글 , , 그리고 한문도 한자의 음에 맞게 정렬그리고 한문도 한자의 음에 맞게 정렬- 그러나 한글 그러나 한글 23502350 자와 한자 자와 한자 48884888 자에 대한 정렬자에 대한 정렬- 지원하지 않는 글자에 대한 정렬은 되지 않음지원하지 않는 글자에 대한 정렬은 되지 않음
![Page 25: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/25.jpg)
오라클 오라클 NLSNLS
24 / 24 / 2626
MS949MS949 에서의 정렬에서의 정렬
기존 기존 KO16KSC5601KO16KSC5601 의 수퍼셋으로 군림하려다 보니 의 수퍼셋으로 군림하려다 보니 총 총 1117211172 자의 한글의 바이트 코드가 한글의 언어적 정렬 순서와 불일치할 수 밖에 없다 자의 한글의 바이트 코드가 한글의 언어적 정렬 순서와 불일치할 수 밖에 없다
Select * From test Order by aSelect * From test Order by a 똠방각하똠방각하 먄해먄해 가나다라마바사가나다라마바사 라디오를켜라라디오를켜라 햏햏햏햏
Select * From test Order by NLSSORT(a, ‘NLS_SORT=UNICODE_BINARY’)Select * From test Order by NLSSORT(a, ‘NLS_SORT=UNICODE_BINARY’) 가나다라마바사가나다라마바사 똠각하똠각하 라디오를켜라라디오를켜라 먄해먄해 햏햏햏햏
Select * From test Order by NLSSORT(a, ‘NLS_SORT=KOREAN_M’)Select * From test Order by NLSSORT(a, ‘NLS_SORT=KOREAN_M’)
![Page 26: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/26.jpg)
오라클 오라클 NLSNLS
25 / 25 / 2626
바로잡기의 필요성을 인식하라바로잡기의 필요성을 인식하라
Ex)Ex)String p_UserComment = String p_UserComment =
new String(request.getParameter(“val").getBytes("KSC5601"),"8859_1");new String(request.getParameter(“val").getBytes("KSC5601"),"8859_1");pstmt.setString(1,p_UserComment);pstmt.setString(1,p_UserComment);pstmt.executeUpdate();pstmt.executeUpdate();
if(resultSet.next())if(resultSet.next()){{ String v_UserComment = String v_UserComment =
new String(resultSet.getString(“val").getBytes("8859_1"),"KSC5601");new String(resultSet.getString(“val").getBytes("8859_1"),"KSC5601");
확장 불가확장 불가 , , 마이그레이션 불가마이그레이션 불가
![Page 27: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/27.jpg)
오라클 오라클 NLSNLS
26 / 26 / 2626
캐릭터 셋 변경의 위험성캐릭터 셋 변경의 위험성
데이터 절삭데이터 절삭
데이터 깨짐데이터 깨짐- US7ASCII- US7ASCII 에서 한글데이타를 에서 한글데이타를 exp/impexp/imp 를 이용하여 를 이용하여 MS949MS949 나 나 UTF8UTF8 로 마이그레이션로 마이그레이션
- - 불가능불가능- KO16KSC5601- KO16KSC5601 에서 한글 데이터를에서 한글 데이터를…… ....
- - 일부 데이터 깨짐일부 데이터 깨짐
어플리케이션 오동작어플리케이션 오동작- - 글자 길이 연산의 오동작글자 길이 연산의 오동작
length, instr, substrlength, instr, substr
기존 캐릭터 셋 새로운 캐릭터 셋 변경가능여부
US7ASCII KSC5601/MS949/UTF8/AL32UTF8 가능
KO16KSC5601 KO16MSWIN949 가능
KO16MSWIN949 UTF8 불가능
UTF8 AL32UTF8 가능
![Page 28: UNICODE Seminar – 한국에서 프로그래머 하기](https://reader033.fdocuments.net/reader033/viewer/2022061502/568136d1550346895d9e6e34/html5/thumbnails/28.jpg)
참조참조 참조참조
Joel Joel 의 블로그 의 블로그 http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200503170001http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200503170001
www.unicode.orgwww.unicode.orghttp://ww.unicode.orghttp://ww.unicode.org
오라클 오라클 NLSNLShttp://www.oracle.com/technology/global/kr/pub/columns/oracle_lns_1.htmlhttp://www.oracle.com/technology/global/kr/pub/columns/oracle_lns_1.html http://www.oracle.com/technology/global/kr/pub/columns/oracle_lns_2.html
진숙의 진숙의 Unicode Unicode 이야기이야기http://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html
Windows toolWindows toolcharmapcharmap