파이썬2 인코딩과 유니코드(발표용)

21
파파파 2 파 파파파파 파파파파 파파파 파파 파파파파 파파 2013 파 3 파 파파파 파파파

Upload: -

Post on 22-Jun-2015

3.225 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: 파이썬2 인코딩과 유니코드(발표용)

파이썬 2 의 인코딩과 유니코드

파이썬 한국 페이스북 그룹2013 년 3 월 세미나

이성주

Page 2: 파이썬2 인코딩과 유니코드(발표용)

2

유니코드에 대한 잦은 오해 또는 인상◦ UTF-8 은 유니코드다 ( 땡 !)◦ 유니코드는 16 비트로 저장된다 . ( 땡 !)◦ 파일에서 인코딩 정보를 알아낼 수 있다 . ( 거의 땡 !)◦ 유니코드는 … 짜증난다 ( 딩동댕 ?)

이성주 (c) 2013

유니코드와 인코딩

Page 3: 파이썬2 인코딩과 유니코드(발표용)

3

반가움 : )

표현은 언어별 ( 또는 종별 ) 로 다르다

안녕하세요Hello你好Bonjour… 왈 ?

이성주 (c) 2013

유니코드는 추상화된 문자

Page 4: 파이썬2 인코딩과 유니코드(발표용)

4

수학 개념은 자연어 독립적

◦ 1000 이하의 3 과 5 의 배수의 합을 구하라 .◦ Find the sum of all the multiples of 3 or 5 below

1000.

그러나 개념을 전달할 때는 서술하는 언어를 특정해야 한다 .

이성주 (c) 2013

유니코드는 추상화된 문자

Page 5: 파이썬2 인코딩과 유니코드(발표용)

5

유니코드 ~ 반가운 감정 ; 수학적 개념: 문자 각각에 해당하는 코드 포인트

인코딩~ 언어별 인사말 ; 개념을 서술한 언어: 특정한 규칙에 따라 문자를 비트로 표현

이성주 (c) 2013

유니코드는 추상화된 문자

Page 6: 파이썬2 인코딩과 유니코드(발표용)

6 이성주 (c) 2013

유니코드와 인코딩

U+

UTF-8

EUC-KR

ASCII

Page 7: 파이썬2 인코딩과 유니코드(발표용)

7

UnicodeEncodeEr-ror: 'ascii' codec can't encode charac-ter

파이썬 2 의 기본 인코딩 , ASCII

이성주 (c) 2013

귀도 (Guido) 의 원죄

Page 8: 파이썬2 인코딩과 유니코드(발표용)

8

<type 'basestring'> | +--<type 'str'> | +--<type 'unicode'>

이성주 (c) 2013

파이썬 2 의 두 가지 문자열 형식

Page 9: 파이썬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

Page 10: 파이썬2 인코딩과 유니코드(발표용)

10 이성주 (c) 2013

UTF-8

ASCII

0 127

Page 11: 파이썬2 인코딩과 유니코드(발표용)

11

sys.setdefaultencoding(‘utf-8’) 다른 파이썬 환경에서는

동작하지 않는다 여러 가지 안 되는 이유를 죽

나열해야 하니 결론은 …

‘ 아니오’

이성주 (c) 2013

고민해결 ?!

Page 12: 파이썬2 인코딩과 유니코드(발표용)

12

1. 초반 디코드2. 유니코드로 통일3. 막판 인코딩

이성주 (c) 2013

유니코드 원칙

Page 13: 파이썬2 인코딩과 유니코드(발표용)

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. 초반 디코드

Page 14: 파이썬2 인코딩과 유니코드(발표용)

14

파일로 저장하거나 네트워크로 전송하기 직전에 <type ‘str’> 으로 변환

>>> f = open(‘text.txt’, ‘w’)>>> f.write(uni_str.encode(‘utf-8’))>>> f.close()

이성주 (c) 2013

3. 인코딩은 마지막에

Page 15: 파이썬2 인코딩과 유니코드(발표용)

15

codes.open() 으로 인코딩 지정

>>> import codecs>>> f = codecs.open(‘text.txt’, ‘w’, encod-ing=‘utf-8’)…>>> f.write(uni_str)>>> f.close()

이성주 (c) 2013

3. 막판 인코딩

Page 16: 파이썬2 인코딩과 유니코드(발표용)

16

ASCII 인코딩만 사용해도 아무 문제가 없는 사람들이 만든 패키지나 라이브러리들에서는 ◦ 유니코드를 지원 안 하는 경우도 많다◦ 유니코드와 인코딩을 완전 잘못 이해하고 구현된 경우도 많다

이성주 (c) 2013

임기응변

Page 17: 파이썬2 인코딩과 유니코드(발표용)

17

가장 널리 사용되는 UTF-8 으로 잠시 변환한 다음 , 일을 마치면 즉시 다시 유니코드로 변환

>>> byte_str = uni_str.encode(‘utf-8’)…>>> uni_str = byte_str.decode(‘utf-8)

이성주 (c) 2013

임기응변

Page 18: 파이썬2 인코딩과 유니코드(발표용)

18

Byte Order Mark◦ 인코딩 정보를 파일에 내장하려는 시도◦ 윈도우에서 주로 사용◦ 2,3,4 바이트 길이

>>> f = open(‘text.txt’, ‘w’)>>> bom = f.read(4)

이성주 (c) 2013

BOMB 이 아닌 BOM

Page 19: 파이썬2 인코딩과 유니코드(발표용)

19

표준화된 방법은 없다 . BOM 이 단서가 되기도 HTTP 프로토콜을 사용하는 웹문서 등에서는 Con-

tent-type 의 charset 이 있는 경우 한국에서는 대부분 EUC-KR 또는 UTF-8

이성주 (c) 2013

인코딩 탐지

Page 21: 파이썬2 인코딩과 유니코드(발표용)

21

이성주 2013 [email protected]

플랫폼 관련 학위 관련

파이썬 ◦ 영상 처리 , 그래프 , 인공지능 연구에

사용◦ O’Reilley 파이썬 관련 서적 번역

작업 중◦ 파이썬 관련 재미있는 주제 찾아서 책

쓰고 싶음

안드로이드◦ 앱 개발하면서 정리해서 좋은 책 쓰고

싶음

C/C++, 자바 , 안드로이드 강의

컴퓨터과학 박사과정 ( 연세대학교 )◦ 영상 인식 , 인공지능 , 그래프

이론 전기전자공학 공학사 ( 연세대학교 ) 캘리포니아 주립대 (Santa Cruz)

이성주 (c) 2013