Knowledge Map

파이썬 한글 처리 본문

PYTHON

파이썬 한글 처리

2016. 9. 26. 11:09

출처 : https://allieus.wordpress.com/2015/03/23/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80%EC%9D%84-%EC%B2%98%EB%A6%AC%ED%95%98%EC%8B%A4-%EB%95%8C-%ED%95%84%ED%9E%88-%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%93%B0/



한글명 파일 생성도 잘됨 ㅎㅎ




파이썬에서 한글을 처리하실 때, 필히 유니코드를 쓰세요.

파이썬 코리아 페이스북 그룹에 올렸던 글입니다.

파이썬2 에서 한글처리에 문제가 있는 것으로 오해가 있는 듯 합니다. 파이썬2 자체에서는 한글처리에 문제가 전혀 없습니다. 단지 개발자가 실수할 여지는 약간 있죠. 파이썬3 에 들어와서 한글처리가 좋아진 것이 아닙니다.

파이썬2 에서 다음 3가지만 지켜주면, 한글처리에 99.9% 문제가 없습니다.

  1. 소스코드 디폴트 인코딩이 ascii 입니다. 그러므로 소스코드 파일의 인코딩을 명시해줘야합니다. 그래야, 소스코드내 문자열을 적절히 유니코드로 변환을 합니다.
    • ex) # coding: utf8 혹은 # coding: cp949
  2. 소스코드에 한글을 쓸 때에는 유니코드로 쓰기.
    • ex) name = u”파이썬 코리아” => 유니코드 문자열입니다.
  3. 파이썬 코드 내에서 문자열은 모두 유니코드로 처리하고, 외부 I/O (파일쓰기, 네트워크 통신 등) 할 때에만 인코딩/디코딩을 해주면 됩니다.

파이썬3 에서는

  1. 소스코드 디폴트 인코딩이 utf8 입니다. utf8 인코딩은 따로 인코딩을 명시하지 않아도 됩니다.
  2. u 를 붙이는 유니코드 문법이 사라지고, 디폴트가 유니코드 문자열입니다. ex) “파이썬 코리아” => 유니코드 문자열입니다.
  3. 이 부분은 동일합니다.

이러한 이유로 (주로 2번), 파이썬2 에서 유니코드로 쓰지 않았던 코드가, 파이썬3 에서는 유니코드로 적용이 되기 때문에, 대다수의 한글이슈가 파이썬3 에서 발생하지 않았던 것입니다. 파이썬 2에서도 유니코드로 한글을 쓰면 됩니다.

파이썬2 한글처리에 대한 오해가 풀렸으면 합니다.🙂


추가로, 직접 인코딩/디코딩을 해주는 경우는 아래 2가지 경우를 제외하고는.

  • 파일 I/O 시에는 직접 인코딩/디코딩

open(“filepath”, “wb”).write(unicode_data.encoding(“utf8”))
unicode_data = open(“filepath”, “rb”).read().decode(“utf8”)

  • low level socket, low level 통신할 때

거의 대부분의 경우 유니코드를 그대로 쓰시면 프레임워크 혹은 파이썬에서 적절히 인코딩/디코딩 처리를 합니다.

  • 1) db adapter 혹은 모델을 통해 문자열을 입력할 때 유니코드 그대로 넘기세요. db adapter 의 <db 연결 설정 인코딩> 에 맞게, 적절히 인코딩/디코딩되어 I/O 가 수행됩니다. db 인코딩이 utf8 이라고 해서 utf8 로 직접 인코딩할 필요가 전혀 없습니다. // 웹페이지를 통해 한글데이터를 입력받으면, 유니코드로 디코딩되어 뷰로 넘겨집니다.
  • 2) 뷰에서 렌더링된 템플릿은 유니코드 그대로 넘기세요. 설정에 맞게 적절히 인코딩됩니다.
  • 3) 표준출력 시에는 유니코드 그대로 출력하세요. 유니코드 출력일 경우, sys.stdout.encoding, sys.stderr.encoding 에 맞게 인코딩되어 출력됩니다.
    • ex) 한글 윈도우에서는 sys.stdout.encoding, sys.stderr.encoding 은 cp949 값을 가집니다.


Comments