티스토리 뷰
파이썬2에서 한글을 사용하니 에러가 많이 발생해서 지금까지 알아낸 사실들을 정리해두려고 한다.
파이썬2 설치시 기본으로 제공되는 idle에서는 문자를 ascii를 사용한다. 그래서 한글은 ascii로 표현할 수 없는 문자이기 때문에 에러가 발생한다. 이때 소스코드 최상단에 아래와 같이 문자를 utf8로 인코딩하라고 지정하면 한글을 사용할 수 있다.
# -*- encoding:utf-8 -*-
일부 편집기들은 자동으로 utf8로 인코딩시켜주는 경우도 있다.
그리고 한가지 더 알아야 할 사실이 있다.
소스코드와 인터프리터의 인코딩이 서로 다르다는 사실이다.
즉, 소스코드를 utf-8로 인코딩하였다고 하여도 인터프리터의 인코딩도 utf-8이 되지 않는다는 것이다.
인터프리터에서 아래와 같이 코드를 작성해보자.
import sys
sys.stdout.encoding
그러면 인터프리터가 사용하는 인코딩을 알 수 있다.
내가 사용중인 윈도우에 설치된 파이썬2의 기본 idle의 인터프리터에서는 'cp949'로 인코딩되어 있다.
그리고 spyder의 인터프리터는 'utf8'로 인코딩되어 있다.
마지막으로 유니코드와 관련된 함수에 대해 알아보자.
유니코드는 utf16이고, utf8과는 다르다는 사실을 꼭 기억하자. (자세한 내용은 검색해보길 바란다.)
파이썬2에서 문자열을 유니코드로 사용하는 방법은 아주 간단하다.
인코딩을 utf8로 지정하고, 아래와 같이 문자열 앞에 u를 붙이면 된다.
u'한글'
인코딩이 cp949인경우 문자열에 u를 붙이면, 단지 cp949문자열이 유니코드가 되는 상황이 발생하더라.
또는 unicode()함수를 이용해서 유니코드로 바꿀 수도 있다.
이때 유니코드로 변환할 문자열과 문자열이 사용된 인코딩도 같이 넘겨주어야 한다.
그러므로 문자열이 사용하는 인코딩이 무엇인지 잘 알고 있어야 한다.
만일 소스코드에서 utf8로 인코딩되었다면 아래와 같이 'utf8'을 넘겨주어야 한다.
unicode('한글', 'utf8')
만일 인터프리터에서 cp949로 인코딩되었다면 아래와 같이 'cp949'로 넘겨주어야 한다.
unicode('한글', 'cp949')
unicode()함수를 사용하지 않고 문자열 클래스가 가지는 decode를 통해서 유니코드로 바꿀 수도 있다.
물론 여기서도 문자열이 사용하는 인코딩을 알고 있어야 한다.
문자열이 utf8이라면 아래와 같이 사용하면 된다.
'한글'.decode('utf8')
마지막으로 encode()에 대해서 알아보자.
encode()는 decode()와 반대로 유니코드를 특정 인코딩으로 변환하는 함수이다.
u'한글'.decode('utf8') # '\xed\x95\x9c\xea\xb8\x80'
u'한글'.decode('cp949') # '\xc7\xd1\xb1\xdb'