Frage

Ich mag Python Zeichen machen ignorieren kann es nicht kodieren, indem man sich mit der Zeichenfolge "<could not encode>" zu ersetzen.

Z. B, ist die Standardcodierung unter der Annahme, ascii, der Befehl

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

ergäbe

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

Gibt es eine Möglichkeit, diese das Standardverhalten zu machen, in all meinem Projekt?

War es hilfreich?

Lösung

Die str.encode Funktion nimmt ein optionales Argument Definition der Fehlerbehandlung:

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

Aus der Dokumentation:

  

Zurück eine codierte Version des Strings. Standardkodierung ist die aktuelle Standard-String-Codierung. Fehler können eine andere Fehlerbehandlungsschema einzustellen gegeben werden. Der Standardwert für Fehler ist ‚strenger‘, was bedeutet, dass Codierungsfehler ein UnicodeError erhöhen. Andere mögliche Werte sind ‚ignore‘, ‚ersetzen‘, ‚xmlcharrefreplace‘, ‚backslashreplace‘ und einen anderen Namen über codecs.register_error registriert (), Abschnitt Codec Basisklassen sehen. Eine Liste der möglichen Codierungen finden Sie im Abschnitt Standard-Codierungen.

In Ihrem Fall die codecs.register_error Funktion könnte von Interesse sein.

[Anmerkung über schlechte Zeichen ]

Durch die Art und Weise, Notiz, wenn register_error mit, dass Sie wahrscheinlich selbst ersetzen finden nicht nur einzelne schlechte Zeichen, sondern Gruppen von aufeinander folgenden schlechten Zeichen mit der Zeichenfolge, es sei denn, Sie achten. Sie erhalten einen Anruf an den Fehlerhandler pro Lauf von schlechten Zeichen, nicht pro Zeichen.

Andere Tipps

>>> 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.

So zum Beispiel:

>>> 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'

Fügen Sie Ihren eigenen Rückruf codecs.register_error mit der Zeichenfolge Ihrer Wahl zu ersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top