728x90

오늘은 Python에서 이모지와 관련하여 인코딩을 하는 과정에서 오류가 발생해서 해결하는 방법에 대해 소개하겠다.

오류

>>> text = "😊"
>>> print(text)
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 17-18: surrogates not allowed

 

이 오류는 주로 Python에서 이모지 또는 특정 유니코드 문자를 처리할 때 발생한다. 이 오류의 원인은 다음과 같다.

서로게이트 쌍 문제: UTF-16에서 사용되는 서로게이트 쌍이 UTF-8로 인코딩 되려 할 때 문제가 발생한다. Python 내부에서 UTF-16 서로게이트 쌍을 UTF-8로 직접 변환하려고 하면, UTF-8이 해당 문자를 표현할 방법이 없기 때문에 오류가 발생한다.

간단하게 말하면 UTF-16에서 사용되는 값이 UTF-8에서 지원하지 않기 때문에 문제가 발생한다.

 

해결방법

문자열을 정제해서 처리하면 가능하다.

# 인코딩할 수 없는 문자를 무시
clean_text = text.encode('utf-8', errors='ignore').decode('utf-8')

# 인코딩할 수 없는 문자를 �로 대체
clean_text = text.encode('utf-8', errors='replace').decode('utf-8')

다음과 같은 방법을 사용하면 처리가 가능하다.