Python 디코딩 유니 코드는 지원되지 않습니다.


81

Python에서 인코딩에 문제가 있습니다. 다른 방법을 시도했지만 출력을 UTF-8로 인코딩하는 가장 좋은 방법을 찾지 못하는 것 같습니다.

이것이 내가하려는 것입니다.

result = unicode(google.searchGoogle(param), "utf-8").encode("utf-8")

searchGoogle에 대한 첫 번째 Google 결과를 반환합니다 param.

이것은 내가 얻는 오류입니다.

exceptions.TypeError: decoding Unicode is not supported

이 오류를 피하기 위해 Python이 내 출력을 UTF-8로 인코딩하는 방법을 아는 사람이 있습니까?

답변:


102

외모 좋아 google.searchGoogle(param)이미 반환 unicode:

>>> unicode(u'foo', 'utf-8')

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    unicode(u'foo', 'utf-8')
TypeError: decoding Unicode is not supported

그래서 당신이 원하는 것은 :

result = google.searchGoogle(param).encode("utf-8")

참고로, 코드는 utf-8인코딩 된 문자열 을 반환 할 것으로 예상 하므로 동일한 인코딩을 unicode()사용 하여 디코딩 (사용 )하고 다시 인코딩 (사용 ) 하는 요점은 무엇 .encode()입니까?


4
솔직히, unicode()무슨 일이 일어나고 있는지 이해하려고 장난을 쳤습니다. :-) 대단히 감사합니다
simonbs

2
이제 나는 때때로 얻을 ascii' codec can't decode byte 0xc3 in position것이다. 그 이유를 알고 있습니까?
simonbs

2
내가 제안한 줄에서? 그러면 searchGoogle ()이 0xC3 바이트의 문자열을 반환했음을 의미합니다. 이를 호출 .encode()하면 Python이 먼저 유니 코드로 변환을 시도합니다 (ascii 인코딩 사용). 왜 searchGoogle ()이 때때로 유니 코드를 반환하고 때로는 문자열을 반환하는지 모르겠습니다. 당신이 무엇을 주느냐에 따라 다를 수 param있습니까? 한 가지 유형을 고수하십시오.
yak

65
유니 코드로 캐스트하는 안전하고 간단한 방법이 있었으면합니다.
Eric Walker

@EricWalker 이미 유니 코드 인 경우 변경되지 않은 param def uors2u(object, encoding=..., errors=...)을 반환 object하거나 str 인 경우 변환 하는 어색한 도우미 함수를 작성할 수 있습니다. 그러나이 코드는 냄새가납니다. 모든 입력을 외부에서 수신하자마자 (파일 시스템과 같이) 즉시 유니 코드로 변환하고 필요한 경우 다시 보내기 전에 다시 변환해야합니다. str을 유니 코드로 변환하는 곳은 한곳뿐이어야하므로 제가 설명한 것과 같은 도우미 함수는 필요하지 않습니다.
Leonid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.