Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Unicode
1. Unicode v 0.9 박일 http://AnDStudy.com http://parkpd.egloos.com
2. Character Set(문자셋) ASCII 는? 26x2(알파벳 대소문자) + 10(숫자) + 특수문자 + 통제문자 등 모두 합쳐 128개 이하(2^7)로 표현 가능 문자셋에 따라 움라우트 문제 등을 표현하기 위해 7bit 에 1bit 추가. (2^8) 옛날 워드스타에서는 제어용으로 1 bit 를 사용.
3. 완성형과 조합형 "가"를 표현하는 방법 KS C 5601 (완성형한글 2350자), 한자, 숫자 … euc-kr은 KS c 5601 이라고 한다. “강"0xB0C1 (0xB000 + 0xC0 + 0x1) 조합형 : 초성"ㄱ"과 중성"ㅏ"를 조립한 "가"0x1100,0x1161 로 나타낼 수도 있다. 초성 "ㄱ"은 0x1100 - HANGUL CHOSEONG KIYEOK 중성 "ㅏ"는 0x1161 - HANGUL JUNGSEON A 확장 1bit, 초성5bit, 중성 5bit, 종성 5bit
4. 문제점 다른 나라로 파일을 보내면 문자셋이 달라 깨져 보임 여러 나라의 문자셋을 같이 보여줄 수 없음(도서관 같은 학술 자료) 소프트웨어를 바이너리 하나로 여러 나라에 판매할 수 없음
5. Code Page CHCP (change code page) 활성 코드 페이지 : 949 (완성형 확장) 한글 조합형 : 초체 1361 영어 : ANSI-437 이스라엘 : ANSI-862 로케일 utf-8 : 65001 http://msdn.microsoft.com/en-us/library/dd317756 [HKEY_CURRENT_USERonsoleSystemRoot%_system32_cmd.exe] "CodePage"=dword:000001b5 "FontSize"=dword:000c0000 "FontFamily"=dword:00000036 "FontWeight"=dword:00000190 "FaceName"=" 굴림체"
6. Unicode 시작 ISO(국제표준기구) 는 ISO 10646 국제 표준 체결 모든 문자를 4 바이트로 Unicode 컨소시엄 Apple, Xerox, Sun, Microsoft, NeXT : 2 바이트 Unicode 컨소시엄의 제안 일부를 ISO 가 수용 ISO 10646-1 Universal (Multiple-Octet Coded) Character Set : UCS 덕분에 Unicode 가 UCS 의 서브셋이 되었음 가장 최신 버전 표준 Unicode 5.2 ISO/IEC 10646:2003 plus Amendments 1,2,3,4,5 and 6
7. Unicode 구조 문자별로 번호(코드 포인트 Code Point) 지정 U+0041 U+ 는 Unicode 0041 : 코드 포인트 값으로 16 진수로 표기 U+0041 는 영어 알파벳 'A’ U+AC00 : 한글 '가‘ U+0000~U+00FF 영역은 ISO 8859-1 문자셋과 동일 ASCII 확장 문자셋(Western European. ISO) ISO/IEC 8859-1 라틴-1 서유럽 ISO/IEC 8859-2 라틴-2 중앙유럽부터... ISO/IEC 8859-16 라틴-10 남동유럽 까지 있다. 한글은 U+AC00 ~ U+D7AF 영역에 정의 0x10FFFF^2 : 100만개 글자(실제로는 10만개 사용)
8.
9. Unicode 체계 BMP (Basic multilingual Plane. 기본언어판) 최초 65536(2^16) 개의 문자 할당되는 영역. Unicode 3.0 : 49,194 문자 정의 특히 한문에서 필요문자가 늘어나면서 보충언어판(Supplementary Plaines)을 정의 Unicode 3.1 에서는 BMP 에 2개 문자 추가, 보충언어판에44,944 개 문자 추가 음표,고대문자,한자(CJK Ideographic Extension B) CJK : 한국, 중국, 일본
10. Unicode 체계 Cell : 한 개의 문자가 할당되는 공간 Plane : 256 * 256 개의 cell 묶음 (FF 개) BMP : Plane 00 Group : 256 개의 Plane 묶음(7F 개)
11. Unicode 표현 'A’ : U+0041 Group 00, Plane 00, Cell 41 '가’ : U+AC00 Group 00, Plane 00, Cell 41 ♪ : U+1D160 Group 00, Plane 01, Cell D160 즉, Plain 번호 5비트, Cell 번호 16비트 21비트 공간 사용
12.
13. UTF-16 BMP 영역 안(U+0000-U+FFFF)의 문자는 그대로 표현, 밖의 문자는 변환 필요 (가변길이) Windows2000 과 그 이후 버전은 UTF-16 기반. 이전 NT 커널은UCS-2 기반. Java 2/Java 5는 UCS2/UTF-16에 의존.
14.
15.
16. Unicode 한글에서 받침 알기 유니코드 2.0 : 한글은 초성 19개, 중성 21개, 종성 28개(없음도 포함)가 있다. 초성 19개를 0...18까지 번호를 붙이고 중성도 0...20, 종성도 역시 0...27까지 번호를 붙인다면, 원하는 코드는 0xAC00 + x*21*28 + y*28 + z (x=초성번호, y=중성번호, z=종성번호)로 만들 수 있다. 종성에서 0 번째에 해당하는 것은 '없음'이므로 유니코드값에서 0xAC00을 뺀 후에 28로 나누어 떨어지는지 확인하면 됩니다. http://jof4002.net/Unicode wchar_t* pString = L"가각나듯"; cout << (pString[0] - 0xAC00) % 28 << endl; // 0 cout << (pString[1] - 0xAC00) % 28 << endl; // 1 cout << (pString[2] - 0xAC00) % 28 << endl; // 0 cout << (pString[3] - 0xAC00) % 28 << endl; // 19
18. http://ikpil.com/1013 #include <iostream> int main() { std::locale::global( std::locale( "" ) ); wchar_tstringdata[4] = { 0, }; stringdata[0] = 0xac00; // 유니코드 "가" 와 같습니다 stringdata[1] = 0x3050; // 유니코드 "ぐ" 와 같습니다. stringdata[2] = 0x10a0; // 유니코드 "Ⴂ" 와 같습니다. std::wcout << stringdata << ""; //std::wcout << L"안녕하세요"; } std::locale::global( std::locale( "" ) ); 을 호출해 줘야 하는 이유는? locale::global 은 미리 생성되어 있는 wcout에는 먹히지 않는다. wcin.imbue( locale("korean") ); 와 wcout.imbue( locale("korean") ); 사용 2. 유니코드 "?" 와 같습니다. 부터는 출력이 안 되는 이유는? 현재 imbue되어 있는 locale로는 출력할 수 없는 character set을 만나면 state의 fail bit을 셋하게 되어 있었습니다. 이후 operation들은 현재 상태가 good()이 아니므로 모두 실패한 것이었습니다. wcout.fail() 로확인하고, wcout.clear(); 를 호출하면 된다. http://ideathinking.com/blog/?p=109
19. BOM(Byte Order Mark) 파일이 어떤 식으로 인코딩되어 있는지 알려주는 헤더 역할 UTF-32, big-endian : 00 00 FE FF UTF-32, little-endian : FF FE 00 00 UTF-16, big-endian : FE FF UTF-16, little-endian : FF FE UTF-8 : EF BB BF UTF-8 에서는 BOM 사용을 별로 권장하지 않음. UTF-8 이 기본 언어는 ASCII 와 호환된다는 장점이 있는데, BOM 처리를 하지 않는 editor 나 웹페이지에서는 BOM 을 i≫¿ 로 출력할 수 있다.
20. Font 문자 -> 유니코드 -> 유니코드 인코딩-> 화면에 그리기 유니코드 폰트 Arial Unicode MS(ARIALUNI.TTF, 22,730KB) 함초롱체, 한컴 바탕 http://maplestory.pe.kr/1785
23. 인코딩 SBCS(Single Byte Character Set) ASCII MBCS(Multi Byte Character Set) UTF-16, UTF-8 문자열 길이를 바로 알 수 없다. WBCS(Wide Byte Character Set) UTF-32, UCS-2, UCS-4 문자셋과인코딩이 동일 SBCD, MBCS, WBCS 는 인코딩 방법이지 인코딩은 아님
24. Reference 대부분의 내용과 그림들의 출처 http://www.novonetworks.com/jamestic/Unicode_1.0.pdf http://www.kristalinfo.com/K-Lab/unicode/Unicode_intro-kr.html Unicode 5.2 Character Code Chartshttp://www.unicode.org/charts/ 조엘 온 소프트웨어 : 유니코드와 문자집합에 대한 고찰 한글 코드페이지 http://www.unicode.org/charts/PDF/UAC00.pdf KS C 5601 완성형 코드 http://zbxe.bluegate.kr/42 http://whatisthat.co.kr/6 유니코드 범위 목록 http://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%EB%B2%94%EC%9C%84_%EB%AA%A9%EB%A1%9D http://ko.wikipedia.org/wiki/ISO/IEC_8859 http://mynotepad.tistory.com/67 http://ikpil.com/1013