SlideShare a Scribd company logo
1 of 83
PYTHON
UNICODE
Moon Yong Joon
문자 인코딩?
문자인코딩이란?
문자인코딩
문자 인코딩(character encoding) 또는 줄여서 인코딩은
문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사
용할 목적으로 부호화하는 방법을 가리킨다.
문자 인코딩을 통해 부호화되어, 복호화하면 본래의 문자나
기호를 뜻하게 되는 부호를 문자 코드( character code)라
고 한다.
문자 인코딩의 구성
문자 세트
문자 인코딩 형태
문자 인코딩 구조
문자 세트
문자 집합 또는 문자셋
문자 집합(character set, charset) 또는 문자셋은 정보를
표현하기 위한 글자들의 집합을 정의한 것으로, 직접적으
로 사용되지 않을 수도 있고 한 문자 집합을 여러 문자 인
코딩에서 쓸 수도 있다.
특히 집합 안의 문자들에 음수가 아닌 정수들을 배정한
것을 부호화된 문자 집합(coded character set, CCS)이
라 한다.
ASCII, UNICODE
ASCII와 같이 더 이상의 문자가 추가될 수 없기도 하고,
 1바이트만으로 표현되는 경우는 SBCS(Single Byte
Character Set)이라고 한다.
유니코드(UNICODE)와 같이 문자가 계속 추가
 하나의 글자를 표현할 때 여러 바이트가 조합될 수 있는
문자 세트를 MBCS(Multi-Byte Character Set)
문자 인코딩 형태
문자 인코딩 형태
문자 인코딩 형태(character encoding form, CEF)는 특정한 문
자 집합 안의 문자들을 컴퓨터 시스템에서 사용할 목적으로 일정
한 범위 안의 정수(코드값)들로 변환하는 방법이다.
여기에는 유니코드 코드 포인트를 8비트 숫자의 집합으로 나타
내는 UTF-8이나, 16비트 숫자의 집합으로 나타내는 UTF-16,
그리고 대부분의 일반적인 문자 인코딩들이 포함된다.
UCS
국제 문자세트(Universal Coded Character Set): UCS-2
및 UCS-4 인코딩은 각 코드 포인트를 정확하게 16 비트 및
32 비트 단위로 인코딩. UCS-4는 모든 유니 코드 6.0 코드
포인트를 인코딩 할 수 있지만 UCS-2는 BMP로 제한
UTF
UTF는 몇 비트 단위로 사용해서 index를 나타냄
UTF-8은 8bit씩 늘려가며 index, UTF-16은 16bit
씩 index, UTF-32는 32bit씩 index
( 실상 UTF-16과 UCS-2, UTF-32와 UCS-4가
index 방식이 유사하나 unicode 3.1이상부터 상이
함 )
문자 인코딩 구조
문자 인코딩 구조
문자 인코딩 구조(character encoding scheme, CES)는
문자 인코딩 형태로 변환된 코드값을 옥텟기반의 시스템
에서 사용하기 위하여 옥텟들로 변환하는 방법이다.
대부분의 문자 인코딩 형태는 8비트 이상의 숫자를 사용
하는 UTF-16과 같은 문자 인코딩 형태의 경우 엔디안을
지정해 주는 것으로 충분하다.
여기에는 ISO 2022와 같은 복합 인코딩이나, SCSU와 같
은 압축 방법 등이 속한다.
BOM
바이트 순서 표식(Byte Order Mark, BOM)은 유니코
드에서 엔디언을 구별하기 위해 사용되는 문자로, 문
자 값은 U+FEFF 이다.
유니코드 인코딩에서 문제가 되는 것은 바이트 순서 또는 엔디
언이다.
즉 'A'를 00 48로 표현할 것인가 48 00으로 표현할 것인가?
UTF-16, UTF-32 같은 인코딩에서는 엔디언의 종류에 따라
문자열의 값이 완전히 달라지므로, 문자열의 엔디언을 구별할
수 있는 표식이 필요하다.
이에 따라 유니코드 문자열 앞에 BOM 문자를 붙여, 엔디언을
구별한다.
UNICODE
문자세트
유니코드 구조
코드 포인트(code point)
문자의 코드값를 표기할 때 코드 포인트(code
point)를 사용하며, U+[16진수 숫자]로 표시합니
다. 예를 들어 A의 유니코드 값은 U+0041로 표
기 하며 가’의 유니코드 값은 U+AC00로 표기합
니다.
유니코드 평면(plane)
유니코드는 110만개 이상의 코드 포인트를 지정
할 수 있다.
유니코드는 110만개 이상의 코드 포인트를 17개
의 '평면(Plane)'으로 나누고 각 평면에서
256*256=65,536개의 문자를 지정할 수 있다.
유니코드 문자표 참조 : https://namu.wiki/w/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C
유니코드 평면 구성
평면(plane)이란 개념을 이용하여 구획을 나눕니다. 이 구획은
BMP(다국어 기본 평면), SMP(다국어 보충 평면), SIP(상형 문자
보충 평면), SSP(특수 목적 보충 평면), PUA(사용자 정의 영역)등
이 정의
유니코드 문자표 참조 : https://namu.wiki/w/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C
다국어 기본평면
다국어 기본평면
국어 기본 평면(Basic multilingual plane, BMP)은 유니코드의 첫째(0
번) 평면으로, U+0000부터 U+FFFF까지의 영역을 차지한다.
Unicode 해당문자 : 예시
Unicode 해당문자
Unicode 한글 목록
Unicode 한글 목록
한글 자모
Hangul Jamo Range: 1100–11FF
This file contains an excerpt from the character code tables and list of character names for The
Unicode Standard, Version 9.0 This file may be changed at any time without notice to reflect errata or
other updates to the Unicode Standard. See http://www.unicode.org/errata/ for an up-to-date list of
errata.
See http://www.unicode.org/charts/ for access to a complete list of the latest character code charts.
See http://www.unicode.org/charts/PDF/Unicode-9.0/ for charts showing only the characters added in
Unicode 9.0. See http://www.unicode.org/Public/9.0.0/charts/ for a complete archived file of
character code charts for Unicode 9.0.
한글 음절
Hangul Syllables Range: AC00–D7AF
This file contains an excerpt from the character code tables and list of character names for The
Unicode Standard, Version 9.0 This file may be changed at any time without notice to reflect errata or
other updates to the Unicode Standard.
See http://www.unicode.org/errata/ for an up-to-date list of errata.
See http://www.unicode.org/charts/ for access to a complete list of the latest character code charts.
See http://www.unicode.org/charts/PDF/Unicode-9.0/ for charts showing only the characters added in
Unicode 9.0.
See http://www.unicode.org/Public/9.0.0/charts/ for a complete archived file of character code charts
for Unicode 9.0
한글 자모
Hangul Jamo Range: 1100–11FF
This file contains an excerpt from the character code tables and list of character names for The
Unicode Standard, Version 9.0 This file may be changed at any time without notice to reflect errata or
other updates to the Unicode Standard. See http://www.unicode.org/errata/ for an up-to-date list of
errata.
See http://www.unicode.org/charts/ for access to a complete list of the latest character code charts.
See http://www.unicode.org/charts/PDF/Unicode-9.0/ for charts showing only the characters added in
Unicode 9.0. See http://www.unicode.org/Public/9.0.0/charts/
for a complete archived file of character code charts for Unicode 9.0.
다국어 보충 평면
다국어 보충 평면
다국어 보충 평면(Supplementary Multilingual Plane,
SMP)은 옛 문자나 음악 기호, 수학 기호 등에 쓰인다.
다국어 보충 평면
보충평면은 평면번호까지 넣어야 하므로
U00000000 로 검색해야 함
UNICODE
ENCODING /
BOM
문자 Encoding 실행
Utf-8
UTF-8 인코딩의 특징은 1~4 바이트의 가변 길이를 가지
는 멀티바이트 캐릭터 형식이라는 점이다. 때문에 아스키
코드와 하위 호환성을 가진다. 아스키 코드의 0~127까
지는 UTF-8로 완전히 동일하게 기록된다.
Utf-8 BOM(byte order mark)는 EF BB BF이면 이 문자가 파일 가장 앞에 붙는다.
파이썬 내에 인코딩시에는 표시하지 않음
utf-8 변환 규칙
utf-8 변환 규칙
Utf-8 예시
Unicode를 utf-8로 encoding 처리
UCS-2  utf-8
2bytes hex 값으로 문자를 전환(ucs2)해서 utf-8으로 한
글 변환
Utf-16
UTF-8과 마찬가지로 가변 길이 인코딩이다.
U+10000 및 이후의 문자는 값에서 U+10000을 뺀 후
문자값을 10비트씩 쪼갠 후 각각 U+D800, U+DC00의
하위 10비트에 끼워 넣는 식으로 총 4바이트로 표현한다.
코드 중간에 '상위/하위 대체 영역'이라는 문자가 정의되
지 않은 부분이 있는 것이 이를 위한 것이다.
이 방법을 이용하면 U+10000부터 U+10FFFF까지 4바
이트를 이용하여 표현할 수 있다.
또한 BOM(xffxfe)이 앞에 붙는다.
utf-16 변환 규칙
utf-16 변환 규칙
Utf-16 예시
Unicode를 utf-16로 encoding 처리
UCS-2  utf-16
2bytes hex 값으로 문자를 전환(ucs2)해서 utf-16으로 한
글 변환
Utf-32
유니코드 문자 하나에 32비트를 이용하는 고정 길이
인코딩이다.
인터넷에서 정보교환용으로는 거의이용되지 않는데
이는 낭비되는 용량이 너무 크기 때문이다.
유니코드 문자가 U+10FFFF까지 있으므로 총 21비
트를 이용하는데 이는 32비트 중 11비트는 전혀 쓰
일 일이 없다는 것이다.
또한 BOM(xffxfex00x00)이 앞에 붙는다.
utf-32 변환 규칙
utf-32 변환 규칙
Utf-32 예시
Unicode를 utf-32로 encoding 처리
BOM(endian)
BOM(endian)
각 유니코드 인코딩 방법에 따른 BOM 값은 다음
과 같다.
Bom 예시 : 숫자 인코딩
각 유니코드 인코딩 방법에 따른 BOM 값은 다음
과 같다.
Endian 처리: utf-16
utf-16로 처리시 little endian tag도 들어가서
표시하고 utf-16le/utf-16be 처리시는 tag 없이
endian 처리
Endian 처리: utf-32
utf-32로 처리시 little endian tag도 들어가서
표시하고 utf-32le/utf-32be 처리시는 tag 없이
endian 처리
UNICODE
CATEGORY
unicode 처리 예시
unicode 문자 열을 기준으로 범주와 이름 처리
unicode : 정규표현식 예시
숫자를 인식하는 정규표현식은 re.ASCII로 파라
미터 전달시는 ascii 숫자만 처리
Unicode Name & lookup
Name & lookup
Unicode Name과 문자 찾기
Unicode category
Letter & Mark
문자 및 mark 범주
Number
숫자 범주
Punctuation
구두점 범주
Symbol & Separator
심벌과 분리자 범주
Other
기타 범주
UNICODE
정규화 및
분해
Unicode normalization
Unicode normalization
유니코드 정규화(Unicode normalization 또는
Unicode equivalence)는 모양이 같은 문자가 여
러 개 있을 경우, 같은 모양의 글자를 서로 다른
코드로 표현이 가능할 때, 유일한 코드로 "정규화
" 하여 이용하는 것
유니코드는 미리 합쳐진(precomposed) 문자와 따로 결합하는(combining)
문자가 공존하고 있다
(예: 한글 자모 영역 [ㅎㅏㄴ]과 한글 음절 영역 [한]).
리고 각 나라 마다 같은 한자에 다른 코드 값을 가지고 있다
(한국어 亮 U+F977, CJKV 통합 한자 亮 U+4EAE).
이들을 적절한 방법으로 정규화하지 않으면 여러가지 문제가 생겨날 수 있다.
Unicodedata : normalize
유니코드 정규화(Unicode normalization) 처리
하는 함수이고 동일한 값이 나오면 encode 후 값
을 비교하면 됨
Unicodedata : normalize예시
NFD로 분리해서 2
개의 문자코드를
표시
Normalization Form D (NFD)
정준 분해 Canonical Decomposition
NFD 예시
Normalize를 처리하면 실제 문자가 분리됨
Normalization Form C (NFC)
정준 분해한 뒤에, 다시 정준 결합 Canonical
Decomposition, followed by Canonical
Composition
NFC 예시
정준 분해한 뒤에, 다시 정준 결합 Canonical
Decomposition, followed by Canonical
Composition
Normalization Form KD (NFKD)
호환 분해 Compatibility Decomposition
Normalization Form KC (NFKC)
호환 분해한 뒤, 다시 정준 결합 Compatibility
Decomposition, followed by Canonical
Composition
Unicode decomposition
decomposition
유니코드에는 Precomposed verses
Decomposed Characters 들이 존재해서 이를
분해
unicodedata : decomposition
미리 정해진 unicode를 찾아 Decomposition한
것을 매핑해서 처리하는 함수
decomposition 예시: 그리스어
미리 정해진 unicode를 찾아 Decomposition한
후에 str로 리턴
decomposition 예시: 일본어
미리 정해진 unicode를 찾아 Decomposition한
후에 str로 리턴
unicodedata : combining
미리 정해진 unicode를 찾아 combining한 것을
확인해서 값을 보냄
unicodedata : combining 예시1
미리 정해진 unicode를 찾아 combining 여부
확인
unicodedata : combining 예시2
미리 정해진 unicode를 찾아 combining 여부
확인
UNICODEDATA
기타 함수
unicodedata : version
유니코드 버전 확인
decimal/digit/numeric
한자의 숫자도 numeric에서는 숫자로 인식
unicodedata : mirrored
캐릭터 이미지 속성 지원 여부, 지원은1, 그렇지
않으면 0을 반환
unicodedata : bidirectional
유니코드가 지정된 값을 가지고 글자의 방향성을
표시
unicodedata : east_asian_width
한중일 문자들의 강조를 나타내는 표시
'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(N
arrow), 'A'(Ambiguous) or 'N'(Natural).

More Related Content

What's hot

BERT Finetuning Webinar Presentation
BERT Finetuning Webinar PresentationBERT Finetuning Webinar Presentation
BERT Finetuning Webinar Presentationbhavesh_physics
 
R Programming: Getting Help In R
R Programming: Getting Help In RR Programming: Getting Help In R
R Programming: Getting Help In RRsquared Academy
 
An OCR System for recognition of Urdu text in Nastaliq Font
An OCR System for recognition of Urdu text in Nastaliq FontAn OCR System for recognition of Urdu text in Nastaliq Font
An OCR System for recognition of Urdu text in Nastaliq FontDr. Syed Hassan Amin
 
2.7 normal forms cnf & problems
2.7 normal forms  cnf & problems2.7 normal forms  cnf & problems
2.7 normal forms cnf & problemsSampath Kumar S
 
10. XML in DBMS
10. XML in DBMS10. XML in DBMS
10. XML in DBMSkoolkampus
 
Natural Language processing Parts of speech tagging, its classes, and how to ...
Natural Language processing Parts of speech tagging, its classes, and how to ...Natural Language processing Parts of speech tagging, its classes, and how to ...
Natural Language processing Parts of speech tagging, its classes, and how to ...Rajnish Raj
 
Assembly language (coal)
Assembly language (coal)Assembly language (coal)
Assembly language (coal)Hareem Aslam
 
Dbms schema & instance
Dbms schema & instanceDbms schema & instance
Dbms schema & instancePapan Sarkar
 
Regular expression
Regular expressionRegular expression
Regular expressionRajon
 
Lecture 06 relational algebra and calculus
Lecture 06 relational algebra and calculusLecture 06 relational algebra and calculus
Lecture 06 relational algebra and calculusemailharmeet
 
BERT Explained: What You Need to Know About Google’s New Algorithm
BERT Explained: What You Need to Know About Google’s New AlgorithmBERT Explained: What You Need to Know About Google’s New Algorithm
BERT Explained: What You Need to Know About Google’s New AlgorithmSearch Engine Journal
 
3. Relational Models in DBMS
3. Relational Models in DBMS3. Relational Models in DBMS
3. Relational Models in DBMSkoolkampus
 

What's hot (20)

BERT Finetuning Webinar Presentation
BERT Finetuning Webinar PresentationBERT Finetuning Webinar Presentation
BERT Finetuning Webinar Presentation
 
R Programming: Getting Help In R
R Programming: Getting Help In RR Programming: Getting Help In R
R Programming: Getting Help In R
 
An OCR System for recognition of Urdu text in Nastaliq Font
An OCR System for recognition of Urdu text in Nastaliq FontAn OCR System for recognition of Urdu text in Nastaliq Font
An OCR System for recognition of Urdu text in Nastaliq Font
 
Bert
BertBert
Bert
 
2.7 normal forms cnf & problems
2.7 normal forms  cnf & problems2.7 normal forms  cnf & problems
2.7 normal forms cnf & problems
 
Compiler unit 2&3
Compiler unit 2&3Compiler unit 2&3
Compiler unit 2&3
 
Image processing
Image processingImage processing
Image processing
 
Python - Lecture 11
Python - Lecture 11Python - Lecture 11
Python - Lecture 11
 
10. XML in DBMS
10. XML in DBMS10. XML in DBMS
10. XML in DBMS
 
Lex
LexLex
Lex
 
Natural Language processing Parts of speech tagging, its classes, and how to ...
Natural Language processing Parts of speech tagging, its classes, and how to ...Natural Language processing Parts of speech tagging, its classes, and how to ...
Natural Language processing Parts of speech tagging, its classes, and how to ...
 
Assembly language (coal)
Assembly language (coal)Assembly language (coal)
Assembly language (coal)
 
Dbms schema & instance
Dbms schema & instanceDbms schema & instance
Dbms schema & instance
 
Regular expression
Regular expressionRegular expression
Regular expression
 
NLP_KASHK:Regular Expressions
NLP_KASHK:Regular Expressions NLP_KASHK:Regular Expressions
NLP_KASHK:Regular Expressions
 
Lecture 06 relational algebra and calculus
Lecture 06 relational algebra and calculusLecture 06 relational algebra and calculus
Lecture 06 relational algebra and calculus
 
BERT Explained: What You Need to Know About Google’s New Algorithm
BERT Explained: What You Need to Know About Google’s New AlgorithmBERT Explained: What You Need to Know About Google’s New Algorithm
BERT Explained: What You Need to Know About Google’s New Algorithm
 
MySQL ppt
MySQL ppt MySQL ppt
MySQL ppt
 
3. Relational Models in DBMS
3. Relational Models in DBMS3. Relational Models in DBMS
3. Relational Models in DBMS
 
Color models
Color modelsColor models
Color models
 

Viewers also liked

파이썬 2와 유니코드
파이썬 2와 유니코드파이썬 2와 유니코드
파이썬 2와 유니코드성주 이
 
파이썬 Datetime 이해하기
파이썬 Datetime 이해하기파이썬 Datetime 이해하기
파이썬 Datetime 이해하기Yong Joon Moon
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
파이썬 sqlite 이해하기
파이썬 sqlite 이해하기파이썬 sqlite 이해하기
파이썬 sqlite 이해하기Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229Yong Joon Moon
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Yong Joon Moon
 
파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기Yong Joon Moon
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기Yong Joon Moon
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging ChallengesAaron Irizarry
 
서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)
서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)
서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)seed:s corporation
 
SMU ADPR Universtiy PPT
SMU ADPR Universtiy PPTSMU ADPR Universtiy PPT
SMU ADPR Universtiy PPTLitmus442
 
Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리Changwoo Ryu
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310Yong Joon Moon
 
[2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견!
[2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견![2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견!
[2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견!Nts Nuli
 

Viewers also liked (20)

파이썬 2와 유니코드
파이썬 2와 유니코드파이썬 2와 유니코드
파이썬 2와 유니코드
 
파이썬 Datetime 이해하기
파이썬 Datetime 이해하기파이썬 Datetime 이해하기
파이썬 Datetime 이해하기
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
파이썬 sqlite 이해하기
파이썬 sqlite 이해하기파이썬 sqlite 이해하기
파이썬 sqlite 이해하기
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging Challenges
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 
서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)
서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)
서울문화기업 아카데미 최종발표회 ㅡ 아티스트맵(Artists' map)
 
SMU ADPR Universtiy PPT
SMU ADPR Universtiy PPTSMU ADPR Universtiy PPT
SMU ADPR Universtiy PPT
 
Unicode
UnicodeUnicode
Unicode
 
Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리
 
Unicode100
Unicode100Unicode100
Unicode100
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
[2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견!
[2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견![2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견!
[2014널리세미나] 접근성 빅(?) 데이터, 새로운 법칙의 발견!
 

Similar to 파이썬 유니코드 이해하기

유니코드 세미나
유니코드 세미나유니코드 세미나
유니코드 세미나YoungGyu Chun
 
델파이와 유니코드
델파이와 유니코드델파이와 유니코드
델파이와 유니코드Devgear
 
Unicode 이해하기
Unicode 이해하기Unicode 이해하기
Unicode 이해하기Ryan Park
 
문자열이란 무엇인가
문자열이란 무엇인가문자열이란 무엇인가
문자열이란 무엇인가Seungyong Lee
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장HolyTak
 
전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용YOUNGGYU CHUN
 
Go character encoding
Go character encodingGo character encoding
Go character encodingHomin Lee
 
Character Encoding in python
Character Encoding in pythonCharacter Encoding in python
Character Encoding in pythondaesung7kang
 

Similar to 파이썬 유니코드 이해하기 (13)

Unicode @KASA
Unicode @KASAUnicode @KASA
Unicode @KASA
 
문자코드
문자코드문자코드
문자코드
 
유니코드 세미나
유니코드 세미나유니코드 세미나
유니코드 세미나
 
문자열 이상재
문자열 이상재문자열 이상재
문자열 이상재
 
델파이와 유니코드
델파이와 유니코드델파이와 유니코드
델파이와 유니코드
 
Unicode 이해하기
Unicode 이해하기Unicode 이해하기
Unicode 이해하기
 
문자열이란 무엇인가
문자열이란 무엇인가문자열이란 무엇인가
문자열이란 무엇인가
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장
 
Unicode
UnicodeUnicode
Unicode
 
전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용전영규 유니코드 세미나_공개용
전영규 유니코드 세미나_공개용
 
Unicode
UnicodeUnicode
Unicode
 
Go character encoding
Go character encodingGo character encoding
Go character encoding
 
Character Encoding in python
Character Encoding in pythonCharacter Encoding in python
Character Encoding in python
 

More from Yong Joon Moon

Scala companion object
Scala companion objectScala companion object
Scala companion objectYong Joon Moon
 
Scala block expression
Scala block expressionScala block expression
Scala block expressionYong Joon Moon
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritanceYong Joon Moon
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong Joon Moon
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic functionYong Joon Moon
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understandingYong Joon Moon
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기Yong Joon Moon
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법Yong Joon Moon
 

More from Yong Joon Moon (20)

rust ownership
rust ownership rust ownership
rust ownership
 
Scala namespace scope
Scala namespace scopeScala namespace scope
Scala namespace scope
 
Scala companion object
Scala companion objectScala companion object
Scala companion object
 
Scala block expression
Scala block expressionScala block expression
Scala block expression
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
 
Scala variable
Scala variableScala variable
Scala variable
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
 
Scala implicit
Scala implicitScala implicit
Scala implicit
 
Scala type args
Scala type argsScala type args
Scala type args
 
Scala trait usage
Scala trait usageScala trait usage
Scala trait usage
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic function
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
 
Scala syntax function
Scala syntax functionScala syntax function
Scala syntax function
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
 

파이썬 유니코드 이해하기

  • 4. 문자인코딩 문자 인코딩(character encoding) 또는 줄여서 인코딩은 문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사 용할 목적으로 부호화하는 방법을 가리킨다. 문자 인코딩을 통해 부호화되어, 복호화하면 본래의 문자나 기호를 뜻하게 되는 부호를 문자 코드( character code)라 고 한다. 문자 인코딩의 구성 문자 세트 문자 인코딩 형태 문자 인코딩 구조
  • 6. 문자 집합 또는 문자셋 문자 집합(character set, charset) 또는 문자셋은 정보를 표현하기 위한 글자들의 집합을 정의한 것으로, 직접적으 로 사용되지 않을 수도 있고 한 문자 집합을 여러 문자 인 코딩에서 쓸 수도 있다. 특히 집합 안의 문자들에 음수가 아닌 정수들을 배정한 것을 부호화된 문자 집합(coded character set, CCS)이 라 한다.
  • 7. ASCII, UNICODE ASCII와 같이 더 이상의 문자가 추가될 수 없기도 하고,  1바이트만으로 표현되는 경우는 SBCS(Single Byte Character Set)이라고 한다. 유니코드(UNICODE)와 같이 문자가 계속 추가  하나의 글자를 표현할 때 여러 바이트가 조합될 수 있는 문자 세트를 MBCS(Multi-Byte Character Set)
  • 9. 문자 인코딩 형태 문자 인코딩 형태(character encoding form, CEF)는 특정한 문 자 집합 안의 문자들을 컴퓨터 시스템에서 사용할 목적으로 일정 한 범위 안의 정수(코드값)들로 변환하는 방법이다. 여기에는 유니코드 코드 포인트를 8비트 숫자의 집합으로 나타 내는 UTF-8이나, 16비트 숫자의 집합으로 나타내는 UTF-16, 그리고 대부분의 일반적인 문자 인코딩들이 포함된다.
  • 10. UCS 국제 문자세트(Universal Coded Character Set): UCS-2 및 UCS-4 인코딩은 각 코드 포인트를 정확하게 16 비트 및 32 비트 단위로 인코딩. UCS-4는 모든 유니 코드 6.0 코드 포인트를 인코딩 할 수 있지만 UCS-2는 BMP로 제한
  • 11. UTF UTF는 몇 비트 단위로 사용해서 index를 나타냄 UTF-8은 8bit씩 늘려가며 index, UTF-16은 16bit 씩 index, UTF-32는 32bit씩 index ( 실상 UTF-16과 UCS-2, UTF-32와 UCS-4가 index 방식이 유사하나 unicode 3.1이상부터 상이 함 )
  • 13. 문자 인코딩 구조 문자 인코딩 구조(character encoding scheme, CES)는 문자 인코딩 형태로 변환된 코드값을 옥텟기반의 시스템 에서 사용하기 위하여 옥텟들로 변환하는 방법이다. 대부분의 문자 인코딩 형태는 8비트 이상의 숫자를 사용 하는 UTF-16과 같은 문자 인코딩 형태의 경우 엔디안을 지정해 주는 것으로 충분하다. 여기에는 ISO 2022와 같은 복합 인코딩이나, SCSU와 같 은 압축 방법 등이 속한다.
  • 14. BOM 바이트 순서 표식(Byte Order Mark, BOM)은 유니코 드에서 엔디언을 구별하기 위해 사용되는 문자로, 문 자 값은 U+FEFF 이다. 유니코드 인코딩에서 문제가 되는 것은 바이트 순서 또는 엔디 언이다. 즉 'A'를 00 48로 표현할 것인가 48 00으로 표현할 것인가? UTF-16, UTF-32 같은 인코딩에서는 엔디언의 종류에 따라 문자열의 값이 완전히 달라지므로, 문자열의 엔디언을 구별할 수 있는 표식이 필요하다. 이에 따라 유니코드 문자열 앞에 BOM 문자를 붙여, 엔디언을 구별한다.
  • 17. 코드 포인트(code point) 문자의 코드값를 표기할 때 코드 포인트(code point)를 사용하며, U+[16진수 숫자]로 표시합니 다. 예를 들어 A의 유니코드 값은 U+0041로 표 기 하며 가’의 유니코드 값은 U+AC00로 표기합 니다.
  • 18. 유니코드 평면(plane) 유니코드는 110만개 이상의 코드 포인트를 지정 할 수 있다. 유니코드는 110만개 이상의 코드 포인트를 17개 의 '평면(Plane)'으로 나누고 각 평면에서 256*256=65,536개의 문자를 지정할 수 있다. 유니코드 문자표 참조 : https://namu.wiki/w/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C
  • 19. 유니코드 평면 구성 평면(plane)이란 개념을 이용하여 구획을 나눕니다. 이 구획은 BMP(다국어 기본 평면), SMP(다국어 보충 평면), SIP(상형 문자 보충 평면), SSP(특수 목적 보충 평면), PUA(사용자 정의 영역)등 이 정의 유니코드 문자표 참조 : https://namu.wiki/w/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C
  • 21. 다국어 기본평면 국어 기본 평면(Basic multilingual plane, BMP)은 유니코드의 첫째(0 번) 평면으로, U+0000부터 U+FFFF까지의 영역을 차지한다.
  • 22. Unicode 해당문자 : 예시 Unicode 해당문자
  • 24. 한글 자모 Hangul Jamo Range: 1100–11FF This file contains an excerpt from the character code tables and list of character names for The Unicode Standard, Version 9.0 This file may be changed at any time without notice to reflect errata or other updates to the Unicode Standard. See http://www.unicode.org/errata/ for an up-to-date list of errata. See http://www.unicode.org/charts/ for access to a complete list of the latest character code charts. See http://www.unicode.org/charts/PDF/Unicode-9.0/ for charts showing only the characters added in Unicode 9.0. See http://www.unicode.org/Public/9.0.0/charts/ for a complete archived file of character code charts for Unicode 9.0.
  • 25. 한글 음절 Hangul Syllables Range: AC00–D7AF This file contains an excerpt from the character code tables and list of character names for The Unicode Standard, Version 9.0 This file may be changed at any time without notice to reflect errata or other updates to the Unicode Standard. See http://www.unicode.org/errata/ for an up-to-date list of errata. See http://www.unicode.org/charts/ for access to a complete list of the latest character code charts. See http://www.unicode.org/charts/PDF/Unicode-9.0/ for charts showing only the characters added in Unicode 9.0. See http://www.unicode.org/Public/9.0.0/charts/ for a complete archived file of character code charts for Unicode 9.0
  • 26. 한글 자모 Hangul Jamo Range: 1100–11FF This file contains an excerpt from the character code tables and list of character names for The Unicode Standard, Version 9.0 This file may be changed at any time without notice to reflect errata or other updates to the Unicode Standard. See http://www.unicode.org/errata/ for an up-to-date list of errata. See http://www.unicode.org/charts/ for access to a complete list of the latest character code charts. See http://www.unicode.org/charts/PDF/Unicode-9.0/ for charts showing only the characters added in Unicode 9.0. See http://www.unicode.org/Public/9.0.0/charts/ for a complete archived file of character code charts for Unicode 9.0.
  • 28. 다국어 보충 평면 다국어 보충 평면(Supplementary Multilingual Plane, SMP)은 옛 문자나 음악 기호, 수학 기호 등에 쓰인다.
  • 29. 다국어 보충 평면 보충평면은 평면번호까지 넣어야 하므로 U00000000 로 검색해야 함
  • 32. Utf-8 UTF-8 인코딩의 특징은 1~4 바이트의 가변 길이를 가지 는 멀티바이트 캐릭터 형식이라는 점이다. 때문에 아스키 코드와 하위 호환성을 가진다. 아스키 코드의 0~127까 지는 UTF-8로 완전히 동일하게 기록된다. Utf-8 BOM(byte order mark)는 EF BB BF이면 이 문자가 파일 가장 앞에 붙는다. 파이썬 내에 인코딩시에는 표시하지 않음
  • 33. utf-8 변환 규칙 utf-8 변환 규칙
  • 35. UCS-2  utf-8 2bytes hex 값으로 문자를 전환(ucs2)해서 utf-8으로 한 글 변환
  • 36. Utf-16 UTF-8과 마찬가지로 가변 길이 인코딩이다. U+10000 및 이후의 문자는 값에서 U+10000을 뺀 후 문자값을 10비트씩 쪼갠 후 각각 U+D800, U+DC00의 하위 10비트에 끼워 넣는 식으로 총 4바이트로 표현한다. 코드 중간에 '상위/하위 대체 영역'이라는 문자가 정의되 지 않은 부분이 있는 것이 이를 위한 것이다. 이 방법을 이용하면 U+10000부터 U+10FFFF까지 4바 이트를 이용하여 표현할 수 있다. 또한 BOM(xffxfe)이 앞에 붙는다.
  • 39. UCS-2  utf-16 2bytes hex 값으로 문자를 전환(ucs2)해서 utf-16으로 한 글 변환
  • 40. Utf-32 유니코드 문자 하나에 32비트를 이용하는 고정 길이 인코딩이다. 인터넷에서 정보교환용으로는 거의이용되지 않는데 이는 낭비되는 용량이 너무 크기 때문이다. 유니코드 문자가 U+10FFFF까지 있으므로 총 21비 트를 이용하는데 이는 32비트 중 11비트는 전혀 쓰 일 일이 없다는 것이다. 또한 BOM(xffxfex00x00)이 앞에 붙는다.
  • 44. BOM(endian) 각 유니코드 인코딩 방법에 따른 BOM 값은 다음 과 같다.
  • 45. Bom 예시 : 숫자 인코딩 각 유니코드 인코딩 방법에 따른 BOM 값은 다음 과 같다.
  • 46. Endian 처리: utf-16 utf-16로 처리시 little endian tag도 들어가서 표시하고 utf-16le/utf-16be 처리시는 tag 없이 endian 처리
  • 47. Endian 처리: utf-32 utf-32로 처리시 little endian tag도 들어가서 표시하고 utf-32le/utf-32be 처리시는 tag 없이 endian 처리
  • 49. unicode 처리 예시 unicode 문자 열을 기준으로 범주와 이름 처리
  • 50. unicode : 정규표현식 예시 숫자를 인식하는 정규표현식은 re.ASCII로 파라 미터 전달시는 ascii 숫자만 처리
  • 51. Unicode Name & lookup
  • 52. Name & lookup Unicode Name과 문자 찾기
  • 54. Letter & Mark 문자 및 mark 범주
  • 57. Symbol & Separator 심벌과 분리자 범주
  • 61. Unicode normalization 유니코드 정규화(Unicode normalization 또는 Unicode equivalence)는 모양이 같은 문자가 여 러 개 있을 경우, 같은 모양의 글자를 서로 다른 코드로 표현이 가능할 때, 유일한 코드로 "정규화 " 하여 이용하는 것 유니코드는 미리 합쳐진(precomposed) 문자와 따로 결합하는(combining) 문자가 공존하고 있다 (예: 한글 자모 영역 [ㅎㅏㄴ]과 한글 음절 영역 [한]). 리고 각 나라 마다 같은 한자에 다른 코드 값을 가지고 있다 (한국어 亮 U+F977, CJKV 통합 한자 亮 U+4EAE). 이들을 적절한 방법으로 정규화하지 않으면 여러가지 문제가 생겨날 수 있다.
  • 62. Unicodedata : normalize 유니코드 정규화(Unicode normalization) 처리 하는 함수이고 동일한 값이 나오면 encode 후 값 을 비교하면 됨
  • 63. Unicodedata : normalize예시 NFD로 분리해서 2 개의 문자코드를 표시
  • 64. Normalization Form D (NFD) 정준 분해 Canonical Decomposition
  • 65. NFD 예시 Normalize를 처리하면 실제 문자가 분리됨
  • 66. Normalization Form C (NFC) 정준 분해한 뒤에, 다시 정준 결합 Canonical Decomposition, followed by Canonical Composition
  • 67. NFC 예시 정준 분해한 뒤에, 다시 정준 결합 Canonical Decomposition, followed by Canonical Composition
  • 68. Normalization Form KD (NFKD) 호환 분해 Compatibility Decomposition
  • 69. Normalization Form KC (NFKC) 호환 분해한 뒤, 다시 정준 결합 Compatibility Decomposition, followed by Canonical Composition
  • 71. decomposition 유니코드에는 Precomposed verses Decomposed Characters 들이 존재해서 이를 분해
  • 72. unicodedata : decomposition 미리 정해진 unicode를 찾아 Decomposition한 것을 매핑해서 처리하는 함수
  • 73. decomposition 예시: 그리스어 미리 정해진 unicode를 찾아 Decomposition한 후에 str로 리턴
  • 74. decomposition 예시: 일본어 미리 정해진 unicode를 찾아 Decomposition한 후에 str로 리턴
  • 75. unicodedata : combining 미리 정해진 unicode를 찾아 combining한 것을 확인해서 값을 보냄
  • 76. unicodedata : combining 예시1 미리 정해진 unicode를 찾아 combining 여부 확인
  • 77. unicodedata : combining 예시2 미리 정해진 unicode를 찾아 combining 여부 확인
  • 81. unicodedata : mirrored 캐릭터 이미지 속성 지원 여부, 지원은1, 그렇지 않으면 0을 반환
  • 82. unicodedata : bidirectional 유니코드가 지정된 값을 가지고 글자의 방향성을 표시
  • 83. unicodedata : east_asian_width 한중일 문자들의 강조를 나타내는 표시 'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(N arrow), 'A'(Ambiguous) or 'N'(Natural).