[Python] Unicode/UTF-8
한글이나 multi-byte character, 특히 국제적인 언어 지원이 필요한 Application을 개발하는 경우 항상 따라다니는 용어가 Unicode 나 UTF-8 등등... 이와 관련된 메모.
뭐 다들 아는 내용이겠지만 내가 가끔 까먹는 통에 그냥 기록으로 남긴다.
0. 무식한 용어정리
1. 내부에서는 Unicode만 쓴다고 생각해!
바로 이거다! 이게 제일 중요하다.
multi-byte character를 쓸 필요가 있다면
이런 식으로 어떻게든 unicode 형식으로 바꿔주라는 거다.
2. Python에서 Character Exception류가 발생하는 경우
1에서 처럼 unicode형식으로 변환을 잘 지켰는데 이런 빌어먹을 exception이 발생하는 경우가 있다. 대표적인 예로 utf-8 encoding으로 소스를 코딩하고 u'...'으로 정의하거나 등등 을 사용했을 경우.
이럴 때는 소스코드 상단에 encoding을 확인시켜 주자.
뭐 형식이야 여러가지가 있겠지만, 소스 제일 첫 줄에 위 코드 하나 박아주는게 그렇게 도움이 되더라.
3. 외부에서 입출력 되는 경우에 encode/decode 사용
뭐 당연하겠지만 누군가 이런 문자열을 달라고 했거나 이런저런 문자로 요청했다면 그 타입에 맞게 데이터를 돌려주는게 인지상정.
내부에서는 무조건 unicode로 처리한다고 했다. 그렇다면 이 데이터를 UTF-8만 이해하는 녀석에게 보내줄 때는 UTF-8형식으로 encode해서 보내주는게 인지상정이겠지.
...
왜 이런 간단한 걸 자꾸 까먹는지 모르겠다. 특히 2번의 encoding을 명시하는 부분 -_-
뭐 다들 아는 내용이겠지만 내가 가끔 까먹는 통에 그냥 기록으로 남긴다.
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을 명시하는 부분 -_-
댓글