Your SlideShare is downloading. ×
0
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Unicode 이해하기
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Unicode 이해하기

25,758

Published on

Unicode,UTF-8, UTF-16, UTF-32,UCS-2, UCS-4,유니코드

Unicode,UTF-8, UTF-16, UTF-32,UCS-2, UCS-4,유니코드

Published in: Technology
3 Comments
29 Likes
Statistics
Notes
No Downloads
Views
Total Views
25,758
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
0
Comments
3
Likes
29
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×