IT/Python

[Python] 유니코드

김반장님 2021. 3. 25. 13:45
반응형

1.1 유니코드 

  

지금까지 문자열을 다루면서 영문과 한글 모두 사용하여 출력되는 것을 확인하였다.  그러나 다른 사람의 컴퓨터, 즉 다른 언어권이나 다른 운영체제에서도 동일하게 출력된다는 보장은 없다.  그 이유는 각 문자열을 표현하는 방식이 다양하기 때문인데, 이와같이 다양한 문자열 표현 방식을 인코딩(endoding) 이라고 한다. 

세계의 모든 문자 코드를 일관된 방식으로 표현할 수 있는 체계를 만들자는 취지로 시작된 것이 바로 유니코드(unicode) 라고 한다. 

  

- 유니코드에 대해 자세히 알아보고 싶다면 홈페이지(http://www.unicode.org/) 를 방문하길. 

대충 뭔소리냐 하면 다음 그림(?)을 보자. 

  

[ 그림 1-1]

 

자주 들어가는 구글이다. 익스플로러에서 '메뉴 -> 보기 -> 인코딩' 에서 일본어를 선택한 화면이다.  

위와 같이 알아볼 수 없는 문자가 나오기도 한다.  유니코드와 관련된 부분에서는 파이썬 2.X와 3의 차이가 약간 있다.  

  

1.2 파이썬 2.x 에서의 유니코드 

 파이썬 2.x 에서는 일반적인 문자열 이외에도 유니코드를 따로 지원해준다고 한다. 유니코드를 표현하려면 문자열 앞에 u를 붙이거나 unicode() 함수를 이용하면 된다.( 아래 스크립트는 캡쳐한 것이 아님) 

 >>> unicode('가','cp949') 

u'\uac00' 

>>> unicode('가','utf8') 

Traceback (most recent call last): 

File "<pyshell#117>", line 1, in <module> 

unicode('가','utf8') 

File "C:\Python26\lib\encodings\utf_8.py", line 16, in decode 

return codecs.utf_8_decode(input, errors, True) 

UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 0: 

unexpected code byte  

  

unicode() 함수의 두 번째 인자에는 문자열의 인코딩을 명시하는데, 잘못 입력하면 위 처럼 decode 에러가 발생한다. 

이것은 Microsoft 한글 윈도우에서는 코드 페이지 949(cp949) 기반 인코딩을 사용하는데 'utf8'로 잘못 디코딩해서 발생한 경우다. 문자열과 유니코드와의 변환은 다음과 같이 할 수 있다. encode(), decode() 메서드를 이용하면 아래 처럼 문자열과 유니코드로의 변환을 자유롭게 할 수 있다. 

 

>>> unicode('가','cp949') 

u'\uac00' 

>>> u'\uac00'.encode('cp949') 

'\xb0\xa1' 

>>> print u'\uac00'.encode('cp949') 

  

또한 현재 시스템의 인코딩은 다음과 같이 확인할 수가 있다. 

>>> import sys 

>>> sys.stdin.encoding 

'cp949' 

>>> sys.stdout.encoding 

'cp949'  

  

1.3 파이썬 3에서의 유니코드 

파이썬 3에서는 일반 문자열이 기본적으로 모두 유니코드이다. 따라서 프로그래머는 글씨가 깨질 걱정을 하지 않아도 된다.  또한 2.x 에서처럼 문자열 앞에 u를 붙일 필요가 없다. 유니코드 이외에 인코딩이 있는 문자열은 bytes로 표현된다. 

아래 [ 그림 1-2 ] 를 보면 알 수 있을 것이다. 

  

[ 그림 1-2 ]

 

또한 어떤 문자의 유니코드 값을 알고 싶거나, 반대로 유니코드 값을 문자로 변환할 때는 [ 그림 1-3 ] 처럼  

chr() 과 ord() 를 사용하면 된다. 

  

[ 그림 1-3 ]

 

반응형

'IT > Python' 카테고리의 다른 글

[Python] 세트  (0) 2021.03.27
[Python] 리스트  (0) 2021.03.26
[Python] 문자열  (0) 2021.03.24
[Python] 변수 / 수치  (0) 2021.01.24
[Python] 주석처리 / 숫자 계산  (0) 2021.01.23