Je dois remplacer tous les caractères non ASCII ( \x00 - \x7F ) avec un espace. Je suis surpris que cela ne soit pas très facile en Python, à moins que je ne manque quelque chose. La fonction suivante supprime simplement tous les caractères non ASCII :
def remove_non_ascii_1(text):
return ''.join(i for i in text if ord(i)<128)
Et celui-ci remplace les caractères non-ASCII par le nombre d'espaces correspondant à la quantité d'octets dans le point de code du caractère (c'est-à-dire le –
est remplacé par 3 espaces) :
def remove_non_ascii_2(text):
return re.sub(r'[^\x00-\x7F]',' ', text)
Comment puis-je remplacer tous les caractères non ASCII par un seul espace ?
Sur el myriade de de similaire SO questions , aucun adresse caractère remplacement comme s'est opposé à à décapage , y s'adresse en outre à tous les caractères non ascii et non à un caractère spécifique.
57 votes
Wow, vous avez vraiment fait de gros efforts pour montrer autant de liens. +1 dès que le jour se renouvelle !
3 votes
Vous semblez avoir manqué celui-ci stackoverflow.com/questions/1342000/
0 votes
J'aimerais voir un exemple d'entrée qui présente des problèmes.
6 votes
@Stuart : Merci, mais c'est le tout premier que je mentionne.
1 votes
@dstromberg : Je mentionne un exemple de personnage problématique dans la question :
–
. C'est ce type .0 votes
Cela m'a beaucoup aidé, j'avais des problèmes lors de l'analyse HTML, mais les caractères qui provoquaient une
UnicodeEncodeError
n'étaient pas nécessaires, donc votre code a été remplacé par quelque chose de plus lisible et réalisable. Merci0 votes
Si vous voulez diverses représentations un peu meilleures de la chaîne en question, voyez les réponses à Python - Conversion Unicode vers ASCII qui utilisent diverses options utiles et des jeux de caractères avec
string.encode()
.0 votes
... Ou, pour obtenir
?
au lieu d'espaces, utilisez quelque chose commeprint s.encode('ascii', 'replace')
=>ABRA?O JOS?
paraABRAÃO JOSÉ