2011년 2월 14일 월요일

[Python] Unicode/UTF-8

한글이나 multi-byte character, 특히 국제적인 언어 지원이 필요한 Application을 개발하는 경우 항상 따라다니는 용어가 Unicode 나 UTF-8 등등... 이와 관련된 메모.

뭐 다들 아는 내용이겠지만 내가 가끔 까먹는 통에 그냥 기록으로 남긴다.

0. 무식한 용어정리
  • Unicode: 문자열 데이터다. -_-
  • UTF-8: Unicode를 UTF-8 형식으로 encode한 녀석이다. -_-;;;;

1. 내부에서는 Unicode만 쓴다고 생각해!

바로 이거다! 이게 제일 중요하다.

multi-byte character를 쓸 필요가 있다면
text =  u'블라블라'
text2 = '블라블라'.decode('utf-8')

이런 식으로 어떻게든 unicode 형식으로 바꿔주라는 거다.

2. Python에서 Character Exception류가 발생하는 경우

1에서 처럼 unicode형식으로 변환을 잘 지켰는데 이런 빌어먹을 exception이 발생하는 경우가 있다. 대표적인 예로 utf-8 encoding으로 소스를 코딩하고 u'...'으로 정의하거나 등등 을 사용했을 경우.

이럴 때는 소스코드 상단에 encoding을 확인시켜 주자.
# -*- coding: utf-8 -*-

뭐 형식이야 여러가지가 있겠지만, 소스 제일 첫 줄에 위 코드 하나 박아주는게 그렇게 도움이 되더라.

3. 외부에서 입출력 되는 경우에 encode/decode 사용

뭐 당연하겠지만 누군가 이런 문자열을 달라고 했거나 이런저런 문자로 요청했다면 그 타입에 맞게 데이터를 돌려주는게 인지상정.

내부에서는 무조건 unicode로 처리한다고 했다. 그렇다면 이 데이터를 UTF-8만 이해하는 녀석에게 보내줄 때는 UTF-8형식으로 encode해서 보내주는게 인지상정이겠지.
text.encode('utf-8')

...

왜 이런 간단한 걸 자꾸 까먹는지 모르겠다. 특히 2번의 encoding을 명시하는 부분 -_-

댓글 없음 :