2009-11-19 1 views
8

ascii로 인코딩하려는 긴 문자열이 있습니다. 내가하고 있어요 :문자열을 ascii로 인코딩

s = s.encode('ascii', 'replace') 

하지만 난 얻을 :

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

(나는 또한 'ignore' 시도했지만 도움이되지 않습니다.) 내가 잘못 뭐하는 거지

?

답변

10

문자열이 인데 이미 인코딩 된 코드는입니다. ascii로 인코딩하기 전에 먼저 디코딩해야합니다.

파이썬은 (당신이 UnicodeEncodeErrorUnicodeDecodeError을하지 얻을 이유입니다)를 해독하려고 implicity입니다.

당신은 아스키로 재 인코딩을 시도 전에 (적절한 인코딩 사용) bytestring를 디코딩 명시 적으로 문제를 해결할 수 있습니다.

예 :

s = s.decode('some_encoding').encode('ascii', 'replace') 

올바른 인코딩하여 문자열 대신 'some_encoding'의, 처음에 인코딩 된 사용합니다.

문자열을 디코딩하기 전에 어떤 인코딩을 사용하는지 알고 있어야합니다. 어디에서 문자열을 가져 왔습니까?

1

encodeunicode 개체에서 str으로 변환해야합니다. str 개체가있는 경우 decode을 사용하여 unicode으로 변환해야합니다.