[파이썬] 파이썬 2와 파이썬 3의 다국어 및 로케일 처리 차이

파이썬은 다국어 지원 및 로케일 처리를 위한 강력한 기능을 제공합니다. 하지만 파이썬 2와 파이썬 3 사이에는 다소 차이가 있습니다. 이번 글에서는 파이썬 2와 파이썬 3에서의 다국어 처리 및 로케일 처리에 대한 차이를 알아보겠습니다.

유니코드 문자열

파이썬 2에서는 기본 문자열 타입이 ASCII이고 유니코드 문자열을 사용하기 위해서는 unicode() 함수를 사용해야 합니다. 예를 들어, 다음과 같은 코드는 파이썬 2에서 유니코드 문자열을 사용하는 방법입니다.

text = unicode("안녕하세요", "utf-8")

하지만 파이썬 3는 기본 문자열 타입이 유니코드이므로 따로 변환할 필요가 없습니다. 다음은 파이썬 3에서 유니코드 문자열을 사용하는 예시입니다.

text = "안녕하세요"

문자열 인코딩

파이썬 2와 파이썬 3에서 문자열의 인코딩 처리도 다릅니다. 파이썬 2에서는 기본적으로 ASCII를 사용하며 유니코드 문자열을 다른 인코딩으로 변환하려면 encode() 메서드를 사용해야 합니다.

text = "안녕하세요"
encoded_text = text.encode("utf-8")

반면에 파이썬 3에서는 기본적으로 유니코드를 사용하며 다른 인코딩으로 변환하려면 encode() 메서드를 사용합니다.

text = "안녕하세요"
encoded_text = text.encode("utf-8")

유니코드 문자열과 바이트 문자열

파이썬 2에서는 유니코드 문자열과 바이트 문자열이 섞일 수 있습니다. 이 경우, 문자열 간의 변환을 위해 decode()encode() 메서드를 사용해야 합니다.

unicode_text = unicode("안녕하세요", "utf-8")
byte_text = "hello".encode("utf-8")

mixed_text = unicode_text + byte_text
decoded_text = mixed_text.decode("utf-8")

하지만 파이썬 3에서는 유니코드 문자열과 바이트 문자열이 서로 다른 타입으로 간주됩니다. 따라서 문자열 간 변환에는 따로 메서드를 사용할 필요가 없습니다.

unicode_text = "안녕하세요"
byte_text = "hello".encode("utf-8")

mixed_text = unicode_text + byte_text  # TypeError: can only concatenate str (not "bytes") to str

로케일 처리

로케일은 지역화된 형식, 날짜, 시간, 통화 등을 표현하기 위한 설정입니다. 파이썬에서는 locale 모듈을 사용하여 로케일 처리를 할 수 있습니다.

파이썬 2와 파이썬 3에서 로케일 처리에 차이가 있는데, 파이썬 2에서는 setlocale() 함수에 문자열을 직접 전달하면 됩니다.

import locale

locale.setlocale(locale.LC_ALL, "ko_KR.utf8")

반면에 파이썬 3에서는 setlocale() 함수에 locale 객체를 전달해야 합니다.

import locale

locale.setlocale(locale.LC_ALL, locale.getlocale())

결론

파이썬 2와 파이썬 3 사이에 다국어 처리 및 로케일 처리에는 차이가 있기 때문에 유의해야 합니다. 코드를 작성할 때 이러한 차이를 이해하고 올바르게 처리하는 것이 중요합니다. 파이썬 2에서 파이썬 3로 마이그레이션을 할 때는 코드를 적절히 수정하여 호환성을 유지하는 것도 고려해야 합니다.