Digital Nomad2016.03.02 19:12

어제 파싱하다가 한참 안돼서... 여기저기 뒤지다가 해결한 세가지 방법 메모


1. 파일의 맨 위에 주석 삽입


#-*- coding:utf-8 -*-


아래에 나오는 모든 문자열이 UTF-8 형식이라는 것을 명시하는 코드


2. UNICODE로 디코딩 후 다시 인코딩

파이썬의 문자열 인식 방법은 기본적으로 Unicode라고 하니, 문자열을 decode 하는 것은 어떤 특정 인코딩(cp949, iso-8859-1, utf-8 등등) 에서 unicode로 환원하는 것이고, encode 하는 것은 Unicode 문자열을 특정 방식으로 인코딩하는 것임. 어딘가에서 파싱한 한글 문자열 a 에서 한글로 검색을 했는데 죽어도 안 찾아진다... 이러면 검색할 때의 인코딩과 문자열 인코딩이 달라서 그런 것으로, 해당 인코딩을 Unicode로 디코딩한 후에 다시 인코딩해야 함.


a = a.decode('cp949').encode('utf-8')


이러면 a라는 cp949 방식으로 인코딩된 문자열을 Unicode로 디코딩한 후에 utf-8로 다시 인코딩해 줌. 어제 이거 몰라서 죽을 뻔 했네...

그래서 파싱한 원래 문자열의 인코딩 방식을 알아야 하는데, 대체로 한글 문자열인데 뭐가 안된다.. 싶으면 보통 cp949 인코딩 사용할 가능성 농후함.

 

Unicode로 디코딩한 상태로 그대로 써도 되는데 나는 utf-8을 선호해서...


3. 외부 라이브러리의 기본 인코딩 방식 설정

파일의 맨 위에 주석을 삽입하는 것이 좋긴 하나... 외부에서 불러온 라이브러리 각 파일에 모두 그짓을 할 수가 없으므로 아래 코드를 써 주면 그와 똑같이 동작함.


import sys

reload(sys)

sys.setdefaultencoding('utf-8')



위 세가지를 조합해 보면, 일단 파일 맨 위에다가 아래와 같이 집어넣고 시작함.


#-*- coding:utf-8 -*-


import sys

reload(sys)

sys.setdefaultencoding('utf-8')


그리고 코드 중간중간에 외부에서 긁어온 한글 문자열 같은 게 말을 안 듣는다... 싶으면 해당 문자열 인코딩을 알아내서


a = a.decode('***').encode('utf-8')


라고 변환해 주면 됨. *** 부분은 한글 문자열의 경우는 보통 cp949임.

저작자 표시 비영리 변경 금지
신고
Posted by 에일라거

댓글을 달아 주세요

  1. 광영

    드래그도 안되게 해 놔서

    2017.07.04 14:28 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 행인

    ㄴ 방심하다 윗댓글 보고 빵터졌넼ㅋ

    2017.10.27 13:20 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. ㅇㅇㅇ

    reload(sys) 안먹는데요? 정의 되지 않았다고 나옵니다.

    2017.11.04 01:03 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 저는 이클립스 환경에서 쓰는데, 왼쪽에 x 표시 뜨긴 하는데 먹긴 먹습니다.... 환경에 따라서 차이가 있는지는 모르겠어요

      2017.11.09 22:19 신고 [ ADDR : EDIT/ DEL ]