2009-11-19 16 views
8

Tengo una cadena larga que quiero codificar para ascii. Que estoy haciendo:Codificando una cadena para ascii

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

pero me sale:

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

(También he intentado 'ignore' pero no ayuda.)

¿Qué estoy haciendo mal?

Respuesta

10

Su cadena es ya codificada con algunas codificaciones. Antes de codificarlo en ascii, primero debe decodificarlo .

Python es implícitamente tratando de descifrarlo (Por eso se obtiene una UnicodeDecodeError no UnicodeEncodeError).

puede resolver el problema mediante la decodificación de explícitamente su cadena de bytes (utilizando la codificación adecuada) antes de intentar recodificar a ASCII.

Ejemplo:

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

Utilice la correcta que codifica la cadena se codifica en primer lugar, en lugar de 'some_encoding'.

Debe saber qué codificación está utilizando una cadena antes de poder decodificarla. ¿De dónde sacaste el hilo?

1

encode se debe utilizar en unicode objetos para convertirlo a str. Si tiene un objeto str, debe usar decode para convertirlo a unicode.

Cuestiones relacionadas