SlideShare a Scribd company logo
1 of 26
Unicode 박일 http://AnDStudy.com http://parkpd.egloos.com
Character Set(문자셋) ASCII 는? 26x2(알파벳 대소문자) + 10(숫자) + 특수문자 + 통제문자 등 모두 합쳐 128개 이하(2^7)로 표현 가능 문자셋에 따라 움라우트 문제 등을 표현하기 위해 7bit 에 1bit 추가. (2^8) 옛날 워드스타에서는 제어용으로 1 bit 를 사용.
완성형과 조합형 "가"를 표현하는 방법 KS C 5601 (완성형한글 2350자), 한자, 숫자 … “강"0xB0C1 (0xB000 + 0xC0 + 0x1) 조합형 : 초성"ㄱ"과 중성"ㅏ"를 조립한 "가"0x1100,0x1161 로 나타낼 수도 있다. 초성 "ㄱ"은 0x1100 - HANGUL CHOSEONG KIYEOK 중성 "ㅏ"는 0x1161 - HANGUL JUNGSEON A 확장 1bit, 초성5bit, 중성 5bit, 종성 5bit
문제점 다른 나라로 파일을 보내면 문자셋이 달라 깨져 보임 여러 나라의 문자셋을 같이 보여줄 수 없음(도서관 같은 학술 자료) 소프트웨어를 바이너리 하나로 여러 나라에 판매할 수 없음
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
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만개 사용)
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)
Unicode 체계 Cell : 한 개의 문자가 할당되는 공간 Plane : 256 * 256 개의 cell 묶음 (FF 개) BMP : Plane 00 Group : 256 개의 Plane 묶음(7F 개)
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비트 공간 사용
Unicode 인코딩 UTF-32 UTF-16 UTF-8 UTF-7 UCS-2 UCS-4 ,[object Object],[object Object]
UTF-16 BMP 영역 안(U+0000-U+FFFF)의 문자는 그대로 표현, 밖의 문자는 변환 필요 (가변길이) Windows2000 과 그 이후 버전은 UTF-16 기반. 이전 NT 커널은UCS-2 기반. Java 2/Java 5는 UCS2/UTF-16에 의존.
UTF-16 변환 규칙 ,[object Object],[object Object]
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
Unicode 변환 USES_CONVERSION; pI->SomeFunctionThatNeedsUnicode(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)
http://ikpil.com/1013 #include <iostream> intmain() {     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
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≫¿ 로 출력할 수 있다.
CHCP, charmap CHCP (change code page) 활성 코드 페이지 : 949
이데아 문자 유니코드 유니코드 인코딩 메모리 폰트
인코딩 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 는 인코딩 방법이지 인코딩은 아님
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
Reference http://ggaman.com/tt/896 http://jof4002.net/Unicode http://www.animalpicturesarchive.com/jinsuk-kim/diary/read.php?2006/0203 http://kaistizen.net/EE/index.php/weblog/comments/unicode_hangul_to_stdout/ http://ideathinking.com/blog/?p=109 http://rein.kr/blog/archives/280 http://rein.kr/blog/archives/585 http://namoda.springnote.com/pages/2017552 http://kldp.org/node/93573
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
Unicode
Unicode

More Related Content

What's hot

파이썬 2와 유니코드
파이썬 2와 유니코드파이썬 2와 유니코드
파이썬 2와 유니코드성주 이
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터Hoyoung Jung
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1Hoyoung Jung
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summaryHoChul Shin
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)Hoyoung Jung
 
코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)
코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)
코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)유익아카데미
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino영욱 김
 
프로그래밍 및 실습 Chap2
프로그래밍 및 실습 Chap2프로그래밍 및 실습 Chap2
프로그래밍 및 실습 Chap2dktm
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부Gwangwhi Mah
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4Jinkyoung Kim
 
[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)NAVER D2
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장HolyTak
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택JinTaek Seo
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)유익아카데미
 

What's hot (20)

파이썬 2와 유니코드
파이썬 2와 유니코드파이썬 2와 유니코드
파이썬 2와 유니코드
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)
 
3.포인터
3.포인터3.포인터
3.포인터
 
코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)
코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)
코딩인카페 C&JAVA 기초과정 컴퓨터와 프로그래밍 소개(3)
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino
 
프로그래밍 및 실습 Chap2
프로그래밍 및 실습 Chap2프로그래밍 및 실습 Chap2
프로그래밍 및 실습 Chap2
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4
 
Boost
BoostBoost
Boost
 
C++11
C++11C++11
C++11
 
[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
 

Viewers also liked

AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8Ryan Park
 
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenProgramming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenRyan Park
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
즉흥연기와프로그래밍
즉흥연기와프로그래밍즉흥연기와프로그래밍
즉흥연기와프로그래밍Ryan Park
 
나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10Ryan Park
 
나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10Ryan Park
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점Ryan Park
 
Domain Driven Design Ch7
Domain Driven Design Ch7Domain Driven Design Ch7
Domain Driven Design Ch7Ryan Park
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLIDRyan Park
 
Oop design principle
Oop design principleOop design principle
Oop design principleRyan Park
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기Ryan Park
 

Viewers also liked (15)

AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8
 
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenProgramming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. Raven
 
Taocp1 2 4
Taocp1 2 4Taocp1 2 4
Taocp1 2 4
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
즉흥연기와프로그래밍
즉흥연기와프로그래밍즉흥연기와프로그래밍
즉흥연기와프로그래밍
 
나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10
 
나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까
 
온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
 
Domain Driven Design Ch7
Domain Driven Design Ch7Domain Driven Design Ch7
Domain Driven Design Ch7
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 
Oop design principle
Oop design principleOop design principle
Oop design principle
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
 

Similar to Unicode

전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용YOUNGGYU CHUN
 
문자 인코딩과 유니코드
문자 인코딩과 유니코드문자 인코딩과 유니코드
문자 인코딩과 유니코드Yongsu Park
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
Go character encoding
Go character encodingGo character encoding
Go character encodingHomin Lee
 
문자열이란 무엇인가
문자열이란 무엇인가문자열이란 무엇인가
문자열이란 무엇인가Seungyong Lee
 
인코딩 발표
인코딩 발표인코딩 발표
인코딩 발표MinJeong Kim
 

Similar to Unicode (11)

전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용
 
문자 인코딩과 유니코드
문자 인코딩과 유니코드문자 인코딩과 유니코드
문자 인코딩과 유니코드
 
Unicode @KASA
Unicode @KASAUnicode @KASA
Unicode @KASA
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
문자열 이상재
문자열 이상재문자열 이상재
문자열 이상재
 
부팅
부팅부팅
부팅
 
Go character encoding
Go character encodingGo character encoding
Go character encoding
 
컴퓨터개론02
컴퓨터개론02컴퓨터개론02
컴퓨터개론02
 
문자코드
문자코드문자코드
문자코드
 
문자열이란 무엇인가
문자열이란 무엇인가문자열이란 무엇인가
문자열이란 무엇인가
 
인코딩 발표
인코딩 발표인코딩 발표
인코딩 발표
 

More from Ryan Park

OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.Ryan Park
 
프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장Ryan Park
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
UnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDUnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDRyan Park
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowRyan Park
 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...Ryan Park
 

More from Ryan Park (6)

OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.
 
프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
UnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDUnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPD
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And How
 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
 

Unicode

  • 1. Unicode 박일 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자), 한자, 숫자 … “강"0xB0C1 (0xB000 + 0xC0 + 0x1) 조합형 : 초성"ㄱ"과 중성"ㅏ"를 조립한 "가"0x1100,0x1161 로 나타낼 수도 있다. 초성 "ㄱ"은 0x1100 - HANGUL CHOSEONG KIYEOK 중성 "ㅏ"는 0x1161 - HANGUL JUNGSEON A 확장 1bit, 초성5bit, 중성 5bit, 종성 5bit
  • 4. 문제점 다른 나라로 파일을 보내면 문자셋이 달라 깨져 보임 여러 나라의 문자셋을 같이 보여줄 수 없음(도서관 같은 학술 자료) 소프트웨어를 바이너리 하나로 여러 나라에 판매할 수 없음
  • 5. 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
  • 6. 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만개 사용)
  • 7.
  • 8. 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)
  • 9. Unicode 체계 Cell : 한 개의 문자가 할당되는 공간 Plane : 256 * 256 개의 cell 묶음 (FF 개) BMP : Plane 00 Group : 256 개의 Plane 묶음(7F 개)
  • 10. 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비트 공간 사용
  • 11.
  • 12. UTF-16 BMP 영역 안(U+0000-U+FFFF)의 문자는 그대로 표현, 밖의 문자는 변환 필요 (가변길이) Windows2000 과 그 이후 버전은 UTF-16 기반. 이전 NT 커널은UCS-2 기반. Java 2/Java 5는 UCS2/UTF-16에 의존.
  • 13.
  • 14.
  • 15. 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
  • 16. Unicode 변환 USES_CONVERSION; pI->SomeFunctionThatNeedsUnicode(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)
  • 17. http://ikpil.com/1013 #include <iostream> intmain() { 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
  • 18. 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≫¿ 로 출력할 수 있다.
  • 19. CHCP, charmap CHCP (change code page) 활성 코드 페이지 : 949
  • 20. 이데아 문자 유니코드 유니코드 인코딩 메모리 폰트
  • 21. 인코딩 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 는 인코딩 방법이지 인코딩은 아님
  • 22. 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
  • 23. Reference http://ggaman.com/tt/896 http://jof4002.net/Unicode http://www.animalpicturesarchive.com/jinsuk-kim/diary/read.php?2006/0203 http://kaistizen.net/EE/index.php/weblog/comments/unicode_hangul_to_stdout/ http://ideathinking.com/blog/?p=109 http://rein.kr/blog/archives/280 http://rein.kr/blog/archives/585 http://namoda.springnote.com/pages/2017552 http://kldp.org/node/93573
  • 24. 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