Unicode100

2,983 views

Published on

Unicode, Font, Glyph, Code Page, Character Code, Character Set, Encoding, UTF-8, UTF-16, UTF-32, ASCII, EUC-KR, CP949, UCS-2, UCS-4

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,983
On SlideShare
0
From Embeds
0
Number of Embeds
51
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Unicode100

  1. 1. Unicode v 1.0 박일 http://AnDStudy.com http://parkpd.egloos.com
  2. 2. 문자? 문자셋? 인코딩? 폰트? 문자는 대소문자 구별을 한다. 영어 문자는 52 개 Character Code : 문자를 표현하는 데이터값 A : 65, B : 66 in ASCII 문자셋(Character Set) : 하나의 언어권에서 사용하는 언어를 표현하기 위한 문자들의 집합 인코딩 : 문자셋과 Character Code 와의 mapping ASCII 도 인코딩 방법의 하나 폰트 : glyphs 집합 일본어 : MS_Gothic, MS_Minch 중국어 : SimSun, PSimsun 폰트 glyphs(글리프) : 문자 표현 그림[도안] 표지, [건축]장식용 세로홈, [고고학] 그림 문자, 상형 문자 Times New Roman Bold A : A Arial Bold A : A
  3. 3. ASCII 26x2(알파벳 대소문자) + 10(숫자) + 특수문자 + 통제문자 -> 128개 이하(2^7) 옛날 워드스타에서는 나머지 1 bit 를 제어용으로 사용
  4. 4. 서유럽으로 간 ASCII 움라우트 등을 표현하기 위해 7bit 에 1bit 추가 (2^8) ASCII 확장 문자셋을 ISO 가 관리하게 됨 ISO/IEC 8859-1 라틴-1 서유럽 ISO/IEC 8859-2 라틴-2 중앙유럽 부터... ISO/IEC 8859-16 라틴-10 남동유럽 까지
  5. 5. 일본으로 간 문자셋 1바이트로 일본어를 표현하기 글자가 둥글어 그리기 어려운 히라가나(あいうえお) 대신 카타가나(アイウエオ) 를 나머지 128 비트 공간에 넣자 영어와 크기를 같게 하기 위해 "반각(半角)문자, Half-Width Katakana“ 사용 MBCS - Multi Byte Character Set 등장 최상위 비트가 0 이면 ASCII Code 로 해석 1 이면 2 바이트를 사용하는 일본어 문자셋을 찾는다 예 : 0xA1 0x72 0xA3 0x70 0x52 0xA2 0xA3 1 바이트가 0x00 ~ 0x7F (0~127)까지의 값이라면 ASCII 문자이다. 서유럽어는 0x80 ~ 0xA0 (예약범위)까지 (128 ~ 160) 공간을 동아시아 MBCS 를 위해서 비워놓았다.
  6. 6. 한국 문자셋 - 완성형과 조합형 완성형 : 완성형한글 2350자, 한자(4884개), 숫자,… “강“ : 0xB0C1 (0xB000 + 0xC0 + 0x1) 조합형 : 초성"ㄱ"과 중성"ㅏ"를 조립한 “가” 는 0x1100,0x1161 로 나타낼 수도 있다. 초성 ‘ㄱ’ : 0x1100 HANGUL CHOSEONG KIYEOK 중성 ‘ㅏ’ : 0x1161 HANGUL JUNGSEON A 확장 1bit, 초성 5bit, 중성 5bit, 종성 5bit
  7. 7. EUC Extened Unix Code(확장 유닉스 코드) 8비트 문자 인코딩 방식 ISO 2022 표준 기반 EUC-KR 은 KS X 1001, KS X 1003 사용 한글 완성형 인코딩 KS X 1003 는 역슬래쉬 대신 사용하는 것만 제외하면 ASCII 코드와 동일 KS X 1001 은 한글, 그림 문자, 한자 등을 포함 128보다 작은 바이트에 KS X 1003 배당 128보다 크거나 같은 바이트에 KS X 1001 배당 실제 사용공간이 상위바이트 161-254, 하위바이트 161-254 뿐이었기 때문에 ‘똠’이나 ‘뷁’ 같은 한글이 빠짐.
  8. 8. CP949 MS 가 KS X 1001 에 없는 한글 8822 자를 추가해 EUCKR 를 확장한 완성형 인코딩 ks_c_5601-1987 원래는 CodePage 번호였으나 지금은 EUCKR 의 확장형인 한글 인코딩 방식을 지칭하는 이름이 되었다 ks_c_5601-92 도 있는 듯
  9. 9. iso2022-kr 과 KPS-9566 iso2022-kr EucKR 을 7bit 만 사용하며 표현하는 방식으로 RFC1557 에 정의 KPS-9566 : 북한 유일의 고유 문자셋 한글 모양은 우리보다 300글자 정도 많고 한자는 200글자 정도 적다 한글 시작이 ‘가’ 가 아닌 ‘김일성김정일’ 6 글자가 먼저 배치되어 있다고... 자음 정렬 순서 ㄱㄴㄷㄹㅁㅂㅅㅈㅊㅋㅌㅍㅎㄲㄸㅃㅆㅉㅇ
  10. 10. Code Page 정의 : OS 에서 선택한 character code 들을 특정한 순서로 정리해 놓은 목록(IBM, MS) another name for character encoding(from wikipedia) 활성 코드 페이지 : 949 (완성형 확장) 한글 조합형 : Code Page 1361 영어 : ANSI-437 이스라엘 : ANSI-862 로케일 utf-8 : 65001 인코딩된 데이터를 어떻게 해석할 것인가 CHCP (change code page) Code Page Identifiers http://msdn.microsoft.com/en-us/library/dd317756
  11. 11. 문제점 다른 CodePage 에서 파일을 열면 글자가 깨져 보임 여러 나라의 문자셋을 같이 보여줄 수 없음 소프트웨어를 바이너리 하나로 여러 나라에 판매할 수 없음 DOS 시절 일본 게임 때문에 인코딩 바꿨다면 나중에 인코딩을 돌려놔야 했다 모든 문자별로 유일한 값을 할당하고 싶다
  12. 12. Unicode 시작 모든 문자별로 유일한 Character Code 를 지정하자 1984년 ISO(국제표준기구)는 ISO 10646 국제 표준 체결 -> 모든 문자를 4 바이트로 1993년 5월 그리스 아테네 회의 : 최종 확정 Unicode Working Group(1989년) 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,6
  13. 13. Unicode 구조 문자별로 번호(코드 포인트 Code Point) 지정 U+0041 U+ 는 Unicode 0041 : 코드 포인트 값으로 16 진수로 표기 U+0041 는 영어 알파벳 'A’ U+AC00 : 한글 '가‘ U+0000~U+00FF 영역은 ISO 8859-1 문자셋과 동일 한글은 U+AC00 ~ U+D7AF 영역에 정의 0x10FFFF^2 : 100만개 글자(10만개 사용)
  14. 14. Unicode 체계 BMP (Basic multilingual Plane. 기본언어판) 최초 65536(2^16) 개의 문자 할당되는 영역. Unicode 3.0 : 49,194 문자 정의 UCS-2 과 동일 특히 한문에서 필요문자가 늘어나면서 보충언어판(Supplementary Plaines)을 정의 Unicode 3.1 에서는 BMP 에 2개 문자 추가, 보충언어판에 44,944 개 문자 추가 음표,고대문자,한자(CJK Ideographic Extension B) CJK : 한국, 중국, 일본 Unicode 3.1 : 49,194 + 44,944 = 94,140
  15. 15. UCS 체계 Cell : 한 개의 문자가 할당되는 공간 Plane : 256 * 256개의 cell 묶음 65536(0xFFFF) 개 -> UCS-2 BMP : Plain 00 Group : 256 개의 Plane 묶음(7F 개)
  16. 16. 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비트 공간 사용
  17. 17. Unicode 인코딩 UTF-32 UTF-16 UTF-8 UTF-7 email 용 UCS-2 UCS-4 모든 Unicode 표현할 수 있으므로 서로 무손실 변환 가능
  18. 18. UTF-32 모든 문자를 코드 포인트 값 유지하면서 32 비트로 만든다. (고정길이) linux의 경우 wchar_t 의 크기가 32bit 라서 mbstowcs()를 이용해서 변환 후 고정길이 인코딩처럼 wcs함수를 사용하면 된다. UCS-4 의 부분집합(17 개의 언어판만 정의)
  19. 19. UTF-16 BMP 영역 안(U+0000-U+FFFF)의 문자는 그대로 표현, 밖의 문자는 변환 필요 (가변길이) Windows 2000 과 이후 버전은 UTF-16 기반. 이전 NT 커널은 UCS-2 기반 Java 2/Java 5는 UCS2/UTF-16에 의존 UCS-2 보다 확장된 개념
  20. 20. UTF-16 변환 규칙 Surrogate Pair (U+D800~U+DFFF) 에는 문자 할당되어 있지 않음
  21. 21. UTF-8 'A’ : U+0041 같은 UTF-16 를 char 로 읽으면 00 (null) 문자열 때문에 기존 함수가 오작동 <html> <head> <meta http-equiv=“Content-Type” content=“text/html;charset=utf-8”> Charset 까지는 ascii 로 읽고 charset 읽은 후에 인 코딩에 맞춰서 파싱 시작. 그러니 charset 이전에 unicode 인코딩 글자가 들어가면 안 됨 웹의 실질적 표준, 많은 *nix 시스템, xml, python 은 UTF-8 을 가장 기초적인 인코딩으로 사용 글자 길이를 알려면 전체 글을 파싱해야 함
  22. 22. 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
  23. 23. Unicode 변환 USES_CONVERSION; pI->SomeFunctionNeedsUnicode(T2OLE(lpszA)); 매크로 인자 결과 A2CW (LPCSTR) (LPCWSTR) A2W (LPCSTR) (LPWSTR) W2CA (LPCWSTR) (LPCSTR) W2A (LPCWSTR) (LPSTR) T2COLE (LPCTSTR) (LPCOLESTR) T2OLE (LPCTSTR) (LPOLESTR) OLE2CT (LPCOLESTR) (LPCTSTR) OLE2T (LPCOLESTR) (LPCSTR)
  24. 24. Unicode in VC++ std::locale::global(std::locale("" )); wcin.imbue(locale("korean")); 와 wcout.imbue(locale("korean")); wcout.fail() 로 확인하고, wcout.clear(); _setmode(_fileno(stdout), _O_U16TEXT);
  25. 25. UTF-16 문자 개수 구하기 code snippet http://dodoubt.tistory.com/40 참고
  26. 26. 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≫¿ 로 출력할 수 있다.
  27. 27. Font 문자 -> 유니코드 -> 유니코드 인코딩 -> 화면 그리기 유니코드 폰트 Arial Unicode MS(ARIALUNI.TTF, 22,730KB) 함초롱체, 한컴 바탕 : http://maplestory.pe.kr/1785 고정길이 폰트(Monospace Font) 굴림체, 바탕체, 돋움체 가변길이 폰트 굴림, 바탕, 돋움 상관없지만 나눔고딕 코딩글꼴 http://dev.naver.com/projects/nanumfont/download Bitstream Vera Sans Mono + 맑은고딕 http://ggotbo.egloos.com/2334938
  28. 28. Console 에서의 폰트 [HKEY_CURRENT_USERConsole %SystemRoot%_system32_cmd.exe] "CodePage"=dword:000001b5 "FontSize"=dword:000c0000 "FontFamily"=dword:00000036 "FontWeight"=dword:00000190 "FaceName"=" 굴림체“ 명령 창에서 사용할 수 있도록 글꼴에 대해 필요한 조건 fixed-pitch font, not italic font, no negative A or C space if (TrueType) FF_MODERN else OEM_CHARSET http://support.microsoft.com/kb/Q247815 명령 프롬프트 디폴트 폰트 바꾸는 법 http://pcwinvista.tistory.com/340 http://dodoubt.tistory.com/34
  29. 29. charmap
  30. 30. 이데아 문자-> 유니코드-> 유니코드 인코딩-> 폰트
  31. 31. 인코딩 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 는 인코딩 방법이지 인코딩이 아님
  32. 32. Reference Unicode 의 이해 – novo networks http://www.novonetworks.com/jamestic/Unicode_1.0.pdf 진숙의 유니코드 입문서 http://www.kristalinfo.com/K-Lab/unicode/Unicode_intro-kr.html MBCS 와 유니코드 http://www.animalpicturesarchive.com/jinsuk-kim/diary/read.php?2006/0203 위키백과 – 유니코드, 유니코드 범위 목록 Unicode 5.2 Character Code Charts http://www.unicode.org/charts/ 조엘 온 소프트웨어 : 유니코드와 문자집합에 대한 고찰 http://www.joelonsoftware.com/articles/Unicode.html Character sets and codepages http://www.microsoft.com/typography/unicode/cscp.htm http://www.microsoft.com/typography/unicode/1250.gif 한글 코드 페이지 http://www.unicode.org/charts/PDF/UAC00.pdf KS C 5601 완성형 코드 http://zbxe.bluegate.kr/42 http://whatisthat.co.kr/6
  33. 33. Reference http://jof4002.net/Unicode VC++ : 유니코드를 표준 출력에 내보내기 http://kaistizen.net/EE/index.php/weblog/comments/unicode_hangul_to_stdout/ IdeA thinKING - C file’s orientation http://ideathinking.com/blog/?p=108 http://ideathinking.com/blog/?p=109 rein : 인코딩과 문자집합: Unicode http://rein.kr/blog/archives/280 rein : Windows Character Encoding: UCS2? UTF-16? http://rein.kr/blog/archives/585 STL string 사용시 wstring 일때, 출력이 되지 않습니다. http://kldp.org/node/93573 http://en.wikipedia.org/wiki/Code_page http://gpgstudy.com/gpgiki/윈도우 다국어 프로그래밍 MBCS 와 UNICODE FAQ 정리 http://mynotepad.tistory.com/67
  34. 34. Reference Unicode - (1) 개념 http://dodoubt.tistory.com/29 Standard output으로 unicode 문자를 출력하기 (Win32 console application) http://dodoubt.tistory.com/35 Unicode - (2) UTF-16(wide character) in Windows http://dodoubt.tistory.com/36 Unicode - (3) UTF-8 in Windows http://dodoubt.tistory.com/38 Unicode - (4) 문자 개수 구하기, 변환(convert) code snippet http://dodoubt.tistory.com/40 window command prompt(cmd.exe)에서 사용하는 font 추가 및 변경하기 http://dodoubt.tistory.com/34 ASCII and Unicode quotation marks by Markus Kuhn http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html 유니 코드 (구원의 여신의 등장?) - 박우영 http://web.edunet4u.net/~han0416/%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4%20% EA%B0%95%EC%A2%8C/chapter2/uni_code.htm Code2001, a Plane 1 Unicode-based Font http://www.code2000.net/code2001.htm wprintf/wcout and unicode characters in VS2005 http://blog.kalmbachnet.de/?postid=98
  35. 35. Reference David Myriad Rosenbaum's Font Sanctuary (Ugaritic Font) http://davidmyriad.tripod.com/myriads.font.page.html http://www.alanwood.net/unicode/fonts-middle-eastern.html#ugaritic 외국어 지원을 위한 Unicode 활용 방법 http://www.ibm.com/developerworks/kr/library/l-linuni.html ASCII Table http://www.asciitable.com/ 심심할때 읽어보는 문자셋, 인코딩 이야기 http://blog.daum.net/_blog/tagArticleList.do?blogid=0Idq4&tagName=%EB%A C%B8%EC%9E%90%EC%85%8B#ajax_history_home 한글 인코딩 이야기 - (1) ASCII, 완성형, 조합형, EUCKR, CP949 http://heyjimin.tistory.com/14 한글 인코딩 이야기 - (2) 유니코드, UCS-2, UTF-8, UTF-16 http://heyjimin.tistory.com/15 http://namoda.springnote.com/pages/2017552 유니코드 볼 수 있는 에디터? KORAIS http://korais.sourceforge.net/screenshots.html

×