2019년 3월 24일 일요일

convert utf8 to euc_kr in python3 (utf8 -> euc_kr 변환)

요즘 대부분의 웹페이지들은 utf8 형태로 저장되어 있으며, 많은 개발언어들도 unicode를 지원하게 되면서 utf8을 쉽게 사용할 수 있습니다.
그러나 여전이 문제가 생기는 경우가 있는데....
csv 파일을 excel(엑셀)에서 불러내기 했더니 utf8 한글들이 모두 깨지는 현상이 발생 합니다.
윈도우 기본 한글 포맷이 unicode포맷이 아니라서 발생하는 현상입니다. 이러한 문제를 해결하기 위해서는 csv 파일을 저장할때 포맷을 변경해야 합니다. 검색해보면 잘동작 되지 않는 현상이 있었습니다. 그것은 Python3기준으로 안되어 있는 예제들이 대부분입니다. 여기에서는 Python3 기준으로 작성 하였습니다.

utf8 <-> euc_kr 변환
아래 예제의 text는 utf-8로 작성하여 테스트 하였습니다.

#string = string.replace(u'\xa0',' ') # 필요한 경우에는 주석을 풀고 사용하세요

f = open("input_euckr.txt",'r',encoding="euc_kr")
input_euckr = f.readlines()
f.close()

data = input_euckr[0]+"한글"
print(type(data))

f = open("out_utf8.txt",'w',encoding="utf-8")
f.write(data)
f.close()

###############################################################

f = open("input_utf8.txt",'r',encoding="utf-8")
input_utf8 = f.readlines()
f.close()

data = input_utf8[0]+"한글"

f = open("out_euckr.txt",'w',encoding="euc-kr")
f.write(data)
f.close()

정리하자면 읽을때 문서가 어떤 형태인지 확인하고 원하는 형태의 encoding을 설정하면 되고 파일을 기록할때도 encoding type표기해서 기록하면 됩니다.

위의 예제는 euc-kr->utf8 , euc-8->euc-kr 변환하는 예제입니다. 첫번째 문장만 변환해서 저장하고 '한글' 이라는 text를 붙여서 저장했습니다.


간혹 u'\xa0' 오류가 발생하는 경우가 있습니다. 이때는 해당 string을 삭제하는 코드를 사용하세요.string = string.replace(u'\xa0',' ') 

결과로 볼때 Python str class내부는 encoding type을 저장해서 unicode형태로 기록 하고 있다고 예상해 볼 수 있습니다. 관련 소스는 찾아보려고 하였으나 소스코드가 복잡해서 짧은 시간안에 확인은 하지 못하였습니다.

https://github.com/python/cpython
https://devguide.python.org/exploring/
builtin type str is at Objects/unicodeobject.c
https://github.com/python/cpython/blob/master/Objects/unicodeobject.c






댓글 없음:

댓글 쓰기