[파이썬] 파이썬 2와 파이썬 3의 유니코드 처리 차이

파이썬은 다양한 유니코드 문자를 지원하기 때문에 국제화와 다국어 지원에 매우 유용한 프로그래밍 언어입니다. 하지만 파이썬 2와 파이썬 3에서는 유니코드 처리에 있어서 몇 가지 차이가 있습니다. 이러한 차이점을 이해하고 사용하는 것은 유니코드 문자를 올바르게 다루기 위해 중요합니다.

1. 문자열 유형의 차이

파이썬 2에서는 문자열을 표현하는 데 strunicode 두 가지 유형을 사용합니다. 그런데 파이썬 3에서는 유니코드 문자열을 표현하기 위해 str 유형만 사용합니다. 따라서, 파이썬 3에서는 모든 문자열이 유니코드로 처리되기 때문에 unicode 유형을 사용할 필요가 없습니다.

2. 유니코드 문자 리터럴 표기

파이썬 2에서는 유니코드 문자 리터럴을 표기하기 위해 u 접두사를 사용합니다. 예를 들면:

my_string = u"안녕하세요"

하지만 파이썬 3에서는 모든 문자열이 유니코드로 처리되므로 u 접두사를 사용할 필요가 없습니다. 또한, 파이썬 3에서는 유니코드 문자 리터럴로 \u와 16진수를 사용할 수 있습니다.

my_string = "\uAC00\uB098\uC758 \uC774\uC57C\uAE30" # "가나의 이야기"

3. 문자열과 바이트

파이썬 2에서는 문자열과 바이트를 명확히 구분합니다. 문자열은 유니코드로 처리되고 바이트는 일련의 8비트 데이터로 처리됩니다. 그래서 문자열과 바이트 간의 변환 함수를 사용하여 데이터를 변환해야 합니다. 하지만 파이썬 3에서는 문자열과 바이트를 구분하지 않고, 바이트 리터럴을 사용하려면 b 접두사를 사용해야 합니다.

my_string = "안녕하세요"
my_string_bytes = my_string.encode('utf-8') # 바이트로 변환

my_bytes = b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94'
my_string = my_bytes.decode('utf-8') # 문자열로 변환

4. 유니코드 정규화

파이썬 3에서는 유니코드 문자열 조작을 위해 정규화 기능이 추가되었습니다. 이는 유니코드 문자열에 포함된 문자들을 표준화하여 정확한 비교와 처리를 지원합니다.

import unicodedata

my_string = "café"
normalized_string = unicodedata.normalize('NFC', my_string)
print(normalized_string) # "café"

결론

파이썬 2와 파이썬 3는 유니코드 처리에 있어서 몇 가지 차이가 있습니다. 파이썬 3에서는 모든 문자열이 유니코드로 처리되고, 문자열과 바이트 간의 변환에는 encode()decode()를 사용해야 합니다. 또한, 정규화 기능을 이용하여 유니코드 문자열을 표준화할 수 있습니다. 이러한 차이점을 잘 이해하고 사용하여 유니코드 문자를 올바르게 처리해야 합니다.