faire python remplacer un caractère pouvant être codées avec une chaîne par défaut

StackOverflow https://stackoverflow.com/questions/1933184

  •  20-09-2019
  •  | 
  •  

Question

Je veux faire python ignorer les caractères, il ne peut pas coder, en les remplaçant simplement par la chaîne "<could not encode>".

par exemple, en supposant que le codage par défaut est ascii, la commande

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

donnerait

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

Est-il possible d'en faire le comportement par défaut, dans l'ensemble de mon projet?

Était-ce utile?

La solution

La fonction str.encode prend un argument facultatif définissant la gestion des erreurs:

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

A partir de la documentation:

  

Retour une version codée de la chaîne. Encodage par défaut est le codage de chaîne par défaut en cours. des erreurs peuvent être données pour définir un système de gestion des erreurs différentes. La valeur par défaut pour les erreurs est « stricte », ce qui signifie que les erreurs de codage soulèvent un UnicodeError. Les autres valeurs possibles sont 'ignorer', 'remplacer', 'xmlcharrefreplace', 'backslashreplace' et tout autre nom enregistré via codecs.register_error (), voir la section Codec classes de base. Pour une liste des encodages possibles, voir la section standard codages.

Dans votre cas, la fonction codecs.register_error pourrait intéresser.

[Remarque sur les mauvais caractères ]

Par ailleurs, notez lors de l'utilisation register_error que vous trouverez vous remplacer probablement pas seulement individuels mauvais personnages, mais des groupes de caractères consécutifs mauvais avec votre chaîne, à moins que vous faites attention. Vous obtenez un appel au gestionnaire d'erreur par série de mauvais caractères, et non par omble chevalier.

Autres conseils

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

Ainsi, par exemple:

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

Ajoutez votre propre rappel à codecs.register_error remplacer par la chaîne de votre choix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top