Pregunta

Quiero hacer caso omiso de Pitón caracteres no puede codificar, mediante la simple sustitución con el "<could not encode>" cadena.

por ejemplo, asumiendo que la codificación predeterminada es ascii, el comando

'%s is the word'%'ébác'

produciría

'<could not encode>b<could not encode>c is the word'

¿Hay alguna manera de hacer que este comportamiento por defecto, a través de toda mi proyecto?

¿Fue útil?

Solución

La función str.encode toma un argumento opcional que define la gestión de errores:

str.encode([encoding[, errors]])

A partir de los documentos:

  

Vuelta una versión codificada de la cadena. codificación por defecto es la corriente de codificación de cadena por defecto. errores pueden ser administrados para configurar una combinación de tratamiento de errores diferente. El valor predeterminado de errores es 'estricta', lo que significa que los errores de codificación plantean una UnicodeError. Otros valores posibles son 'ignorar', 'reemplazar', 'xmlcharrefreplace', 'backslashreplace' y cualquier otro nombre registrado a través de codecs.register_error (), consulte la sección Clases Codec Base. Para obtener una lista de posibles codificaciones, véase la sección codificaciones estándar.

En su caso, la href="http://docs.python.org/library/codecs.html#codecs.register_error" rel="noreferrer"> codecs.register_error función podría ser de interés.

[Aviso sobre los malos caracteres ]

Por cierto, tenga en cuenta cuando se utiliza register_error que es probable que se encuentra la sustitución de su mala disposición no sólo individuales sino grupos de personajes malos consecutivos con su cadena, a menos que se preste atención. Se obtiene una llamada al gestor de errores por ejecución de malos caracteres, no por carbón.

Otros consejos

>>> help("".encode)
Help on built-in function encode:

encode(...)
S.encode([encoding[,errors]]) -> object

Encodes S using the codec registered for encoding. encoding defaults
to the default encoding. errors may be given to set a different error
handling scheme. Default is 'strict' meaning that encoding errors raise
a UnicodeEncodeError. **Other possible values are** 'ignore', **'replace'** and
'xmlcharrefreplace' as well as any other name registered with
codecs.register_error that is able to handle UnicodeEncodeErrors.

Así, por ejemplo:

>>> x
'\xc3\xa9b\xc3\xa1c is the word'
>>> x.decode("ascii")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
>>> x.decode("ascii", "replace")
u'\ufffd\ufffdb\ufffd\ufffdc is the word'

Añada su propia devolución de llamada a codecs.register_error para reemplazar con la cadena de su elección.

scroll top