한글 encoding
2020. 3. 10. 02:02ㆍ프로그래밍/Python
파이썬 스크립트에서 한글을 쓰는 순간 맞닥뜨리게 된다.
스크립트에 한글을 쓰는 순간 다음과 같은 에러가 뿜뿜한다. ( 보통 주석에 썼다가 )
SyntaxError: Non-ASCII character '\xed' in 어쩌구저쩌구, but no encoding declared 어쩌구저쩌구
해결 방법은 3 가지가 있다.
1. 파일 상단에 주석 넣기
#-*-coding:utf-8-*-
이 아래에 나오는 모든 문자열이 UTF-8 이라고 명시하는 방법이다.
단, 스크립트 파일에서 '한글' 을 사용 할 수 있게 해줄 뿐이다.
# 주석에 한글을 쓸 수 있다
print '한글' #파일에 한글이 등장 하게 되었다!
하지만, 아래처럼 변수에 한글을 집어넣고 print 한다거나, 함수 인자로 넘긴다거나 할 수 없다.
str = '한글'
print str(unicode(s))
이 문제를 해결하려면 2번 방식처럼 명시적으로 문자열을 변환해줘야 한다.
2. UNICODE 로 디코딩 후 다시 인코딩
korean_str = korean_str.decode('cp949').encode('utf-8')
cp949 ( 한글 ) 로 인코딩된 문자열을 Unicode 로 디코딩 하고,
다시 UTF-8 로 인코딩 해주는 것이다.
cp949 -> Unicode -> utf-8
3. default encoding ( 기본 인코딩 ) 을 변경
파이썬 버전마다 default encoding 방식이 다르다.
다음 명령어로 사용 중인 파이썬 버전의 default encoding 을 확인 할 수 있다.
import sys
print(sys.getdefaultencoding())
python2 는 ascii
python3 는 utf-8
default encoding 은 파이썬이 문자열을 기본적으로 어떤 인코딩으로 인식 할지 지정한다.
다음 명령어로 default encoding 을 변경 할 수 있다.
( python3 에는 해당 함수가 사라졌다고 하니 참고 )
import sys
reload(sys) # reload 해주지 않으면 setdefaultencoding() 호출 불가
sys.setdefaultencoding('utf-8')