본문 바로가기
Python/Python FAQ

Python UnicodeEncodeError: 'ascii' 코덱은 위치 20의 문자 u'\xa0'(10진법 범위를 벗어남)을 인코딩할 수 없습니다., UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

by 베타코드 2023. 5. 23.
반응형

질문


나는 다른 웹 페이지 (다른 사이트에서)에서 가져온 텍스트에서 유니코드 문자를 다루는 데 문제가 있습니다. 나는 BeautifulSoup을 사용하고 있습니다.

문제는 오류가 항상 재현되는 것은 아니며 때로는 일부 페이지에서 작동하고 때로는 UnicodeEncodeError를 던지면서 실패합니다. 나는 생각할 수 있는 거의 모든 것을 시도해 보았지만, 어떤 종류의 유니코드 관련 오류를 던지지 않고 일관되게 작동하는 것을 찾지 못했습니다.

문제를 일으키는 코드 섹션 중 하나는 아래에 나와 있습니다:

agent_telno = agent.find('div', 'agent_contact_number')
agent_telno = '' if agent_telno is None else agent_telno.contents[0]
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()

아래는 위의 코드 스니펫을 실행할 때 SOME 문자열에서 생성된 스택 추적입니다:

Traceback (most recent call last):
  File "foobar.py", line 792, in <module>
    p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

나는 이것이 일부 페이지 (혹은 더 구체적으로, 일부 사이트에서의 페이지)가 인코딩되어 있을 수 있기 때문이라고 생각합니다. 모든 사이트는 영국에 기반하고 있으며 영국에서 사용하도록 제공되는 데이터가 있으므로 국제화나 영어 이외의 텍스트를 다루는 문제는 없습니다.

이 문제를 일관되게 해결하기 위한 아이디어가 있는 사람이 있나요?


답변


Python Unicode HOWTO를 읽으세요. 이 오류는 매우 처음의 예제입니다.

str()을 사용하여 유니코드에서 인코딩 된 텍스트 / 바이트로 변환하지 마십시오.

대신, 문자열을 인코딩하기 위해 .encode()를 사용하세요:

p.agent_info = u' '.join((agent_contact, agent_telno)).encode('utf-8').strip()

또는 전적으로 유니코드로 작업하십시오.

반응형

댓글