2011-10-01 3 views
6

이 줄어떻게 encode ('ascii', 'ignore')하여 UnicodeDecodeError를 던질 수 있습니까?

data = get_url_contents(r[0]).encode('ascii', 'ignore') 

이 오류

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11450: ordinal not in range(128) 

을 생산? 'ignore'를 사용하기 때문에 출력을 문자열 변수에 저장하는 경우 디코딩 오류가 발생하지 않아야한다고 가정했습니다.

+0

문제는 _decoding_ 함께하지 -

(그것이 get_url_contents 기능과 관련이있을 수 있습니다하지만 제가 위에서 설명한 나의 추측이다 물론,이 문제 것을 알고하지 않습니다.) _부호화_. 그들은 동일하지 않습니다. – agf

+0

Wt는'get_url_contents'합니까? 이것은 예외가'encode'가 아니라 그 함수에서 발생하는 것처럼 보입니다. –

+0

@Trindaz, 0xc3은 ASCII 문자가 아닙니다. –

답변

3

파이썬 2의 특징으로 인해 바이트 문자열 (즉, 이미 인코딩 된 텍스트)에 encode을 호출 할 수 있습니다. 이 경우 먼저 ascii로 디코딩하여 유니 코드 객체로 변환하려고 시도합니다.

get_url_contents(r[0]).decode('ascii').encode('ascii', 'ignore') 

파이썬 3에서, 바이트 문자열이 encode 방법을 가지고 있지 않기 때문에 같은 문제는 단지 AttributeError를 일으킬 것입니다 : get_url_contents는 바이트 문자열을 반환한다면, 당신의 라인을 효율적으로이 작업을 수행합니다. ,

관련 문제