한글 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')