파이썬2 인코딩과 유니코드(발표용)
TRANSCRIPT
파이썬 2 의 인코딩과 유니코드
파이썬 한국 페이스북 그룹2013 년 3 월 세미나
이성주
2
유니코드에 대한 잦은 오해 또는 인상◦ UTF-8 은 유니코드다 ( 땡 !)◦ 유니코드는 16 비트로 저장된다 . ( 땡 !)◦ 파일에서 인코딩 정보를 알아낼 수 있다 . ( 거의 땡 !)◦ 유니코드는 … 짜증난다 ( 딩동댕 ?)
이성주 (c) 2013
유니코드와 인코딩
3
반가움 : )
표현은 언어별 ( 또는 종별 ) 로 다르다
안녕하세요Hello你好Bonjour… 왈 ?
이성주 (c) 2013
유니코드는 추상화된 문자
4
수학 개념은 자연어 독립적
◦ 1000 이하의 3 과 5 의 배수의 합을 구하라 .◦ Find the sum of all the multiples of 3 or 5 below
1000.
그러나 개념을 전달할 때는 서술하는 언어를 특정해야 한다 .
이성주 (c) 2013
유니코드는 추상화된 문자
5
유니코드 ~ 반가운 감정 ; 수학적 개념: 문자 각각에 해당하는 코드 포인트
인코딩~ 언어별 인사말 ; 개념을 서술한 언어: 특정한 규칙에 따라 문자를 비트로 표현
이성주 (c) 2013
유니코드는 추상화된 문자
6 이성주 (c) 2013
유니코드와 인코딩
U+
UTF-8
EUC-KR
ASCII
7
UnicodeEncodeEr-ror: 'ascii' codec can't encode charac-ter
파이썬 2 의 기본 인코딩 , ASCII
이성주 (c) 2013
귀도 (Guido) 의 원죄
8
<type 'basestring'> | +--<type 'str'> | +--<type 'unicode'>
이성주 (c) 2013
파이썬 2 의 두 가지 문자열 형식
9
유니코드 인코딩과 디코딩
인코딩 디코딩
u.encode(encoding)
<type ‘unicode’> to <type ‘str’>
‘ 유니코드 형식의 문자열을 지정된 인코딩을 사용하여 str 형식으로 변환’
U+xxxx
s.decode(encoding)
<type ‘str’> to <type ‘uni-code’>
‘ 특정한 인코딩으로 ‘ str’ 을 읽어들여 유니코드 형식으로 변환
이성주 (c) 2013
10 이성주 (c) 2013
UTF-8
ASCII
0 127
11
sys.setdefaultencoding(‘utf-8’) 다른 파이썬 환경에서는
동작하지 않는다 여러 가지 안 되는 이유를 죽
나열해야 하니 결론은 …
‘ 아니오’
이성주 (c) 2013
고민해결 ?!
12
1. 초반 디코드2. 유니코드로 통일3. 막판 인코딩
이성주 (c) 2013
유니코드 원칙
13
가능한 빨리 <type ‘unicode’> 로 변환
def to_unicode(obj, encoding=‘utf-8): if isinstance(obj, basestring): if not isinstance(obj, unicode): obj = unicode(obj, encoding) return obj
이성주 (c) 2013
1. 초반 디코드
14
파일로 저장하거나 네트워크로 전송하기 직전에 <type ‘str’> 으로 변환
>>> f = open(‘text.txt’, ‘w’)>>> f.write(uni_str.encode(‘utf-8’))>>> f.close()
이성주 (c) 2013
3. 인코딩은 마지막에
15
codes.open() 으로 인코딩 지정
>>> import codecs>>> f = codecs.open(‘text.txt’, ‘w’, encod-ing=‘utf-8’)…>>> f.write(uni_str)>>> f.close()
이성주 (c) 2013
3. 막판 인코딩
16
ASCII 인코딩만 사용해도 아무 문제가 없는 사람들이 만든 패키지나 라이브러리들에서는 ◦ 유니코드를 지원 안 하는 경우도 많다◦ 유니코드와 인코딩을 완전 잘못 이해하고 구현된 경우도 많다
이성주 (c) 2013
임기응변
17
가장 널리 사용되는 UTF-8 으로 잠시 변환한 다음 , 일을 마치면 즉시 다시 유니코드로 변환
>>> byte_str = uni_str.encode(‘utf-8’)…>>> uni_str = byte_str.decode(‘utf-8)
이성주 (c) 2013
임기응변
18
Byte Order Mark◦ 인코딩 정보를 파일에 내장하려는 시도◦ 윈도우에서 주로 사용◦ 2,3,4 바이트 길이
>>> f = open(‘text.txt’, ‘w’)>>> bom = f.read(4)
이성주 (c) 2013
BOMB 이 아닌 BOM
19
표준화된 방법은 없다 . BOM 이 단서가 되기도 HTTP 프로토콜을 사용하는 웹문서 등에서는 Con-
tent-type 의 charset 이 있는 경우 한국에서는 대부분 EUC-KR 또는 UTF-8
이성주 (c) 2013
인코딩 탐지
20
http://en.wikipedia.org/wiki/Unicode#Mapping_and_encodings
http://www.joelonsoftware.com/articles/Unicode.html http://www.tbray.org/ongoing/When/200x/2003/04/26/UTF http://www.evanjones.ca/python-utf8.html http://farmdev.com/talks/unicode/
이성주 (c) 2013
유니코드와 인코딩 관련 참조
21
이성주 2013 [email protected]
플랫폼 관련 학위 관련
파이썬 ◦ 영상 처리 , 그래프 , 인공지능 연구에
사용◦ O’Reilley 파이썬 관련 서적 번역
작업 중◦ 파이썬 관련 재미있는 주제 찾아서 책
쓰고 싶음
안드로이드◦ 앱 개발하면서 정리해서 좋은 책 쓰고
싶음
C/C++, 자바 , 안드로이드 강의
컴퓨터과학 박사과정 ( 연세대학교 )◦ 영상 인식 , 인공지능 , 그래프
이론 전기전자공학 공학사 ( 연세대학교 ) 캘리포니아 주립대 (Santa Cruz)
이성주 (c) 2013