반응형
질문
나는 다른 웹 페이지 (다른 사이트에서)에서 가져온 텍스트에서 유니코드 문자를 다루는 데 문제가 있습니다. 나는 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()
또는 전적으로 유니코드로 작업하십시오.
반응형
댓글