Remplacement d'un étrange guillemet simple (’) avec une chaîne vide en Python
Je suis en train d'utiliser string.replace('’','')
pour remplacer le redoutable bizarre seule citation de caractères: ’ (aka \xe2 aka #8217). Mais quand je lance la ligne de code, j'obtiens cette erreur:
SyntaxError: Non-ASCII character '\xe2' in file
MODIFIER: je reçois ce message d'erreur lorsque vous essayez de remplacer des caractères dans un fichier CSV obtenu à distance.
# encoding: utf-8
import urllib2
# read raw CSV data from URL
url = urllib2.urlopen('http://www.aaphoenix.org/meetings/aa_meetings.csv')
raw = url.read()
# replace bad characters
raw = raw.replace('’', "")
print(raw)
Même après le code ci-dessus est exécuté, le caractère redondant existe encore dans le résultat d'impression. J'ai essayé les suggestions ci-dessous les réponses. Assez sûr que c'est un problème de codage, mais je ne sais pas comment résoudre le problème, alors, bien sûr, toute aide est très appréciée.
J'apprécie vraiment la tente de répondre à cette question, mais les réponses n'ont pas résolu le problème. J'ai édité ma question plus en détail et le code, je l'espère.
Avez-vous essayé
Oui, je l'ai fait. Même résultat.
Si vous utilisez
Je ne l'ai pas essayé, mais la réponse ci-dessous travaillé parfaite pour ma situation.
Avez-vous essayé
latin-1
?Oui, je l'ai fait. Même résultat.
Si vous utilisez
raw.replace('’'.decode('utf-8'), "")
? Qu'en est raw.replace(unichr(8217), "")
?Je ne l'ai pas essayé, mais la réponse ci-dessous travaillé parfaite pour ma situation.
OriginalL'auteur Gady | 2011-09-13
Vous devez vous connecter pour publier un commentaire.
Ici, le problème est avec le codage du fichier que vous avez téléchargé (
aa_meetings.csv
). Le serveur n'a pas déclarer un encodage dans ses en-têtes HTTP, mais le seul non-ASCII1 d'octet dans le fichier a la valeur 0x92. Vous dites que c'est censé être "le redoutable bizarre seul caractère de guillemet", donc l'encodage du fichier estwindows-1252
. Mais vous essayez de rechercher et remplacer pour l'encodage UTF-8 de U+2019, c'est à dire'\xe2\x80\x99'
, ce qui n'est pas ce qui est dans le fichier.De fixation, c'est aussi simple que l'ajout d'appels appropriés pour
encode
etdecode
:1 en "ASCII" je veux dire "l'encodage des caractères qui correspond unique octets avec des valeurs de 0x00 à travers 0x7F directement à U+0000 à U+007F, et ne définit pas le sens des octets avec des valeurs 0x80 par 0xFF".
OriginalL'auteur zwol
Vous avez à déclarer l'encodage de votre fichier source.
De mettre ce que l'une des deux premières lignes de votre code:
Si vous utilisez un encodage autre que UTF-8 (par exemple le Latin-1), vous devez vous mettre à la place.
OriginalL'auteur Roberto Bonvallet
Ce fichier est encodé en Windows-1252. L'apostrophe
U+2019
code\x92
dans ce codage. La bonne chose est pour décoder le fichier en Unicode pour le traitement:Le problème était qu'il était à la recherche pour une codé en UTF-8
U+2019
, c'est à dire\xe2\x80\x99
, ce qui n'était pas dans le fichier. La conversion en Unicode résout ce.Utilisant unicode littéraux que j'ai ici est un moyen facile d'éviter cette erreur. Cependant, vous pouvez coder le caractère directement si vous écrivez
u'’'
:OriginalL'auteur Josh Lee
Vous pouvez faire
string.replace('\xe2', "'")
pour les remplacer avec les apostrophes.OriginalL'auteur Ethan Furman
Je recevais ces
Non-ASCII character '\xe2'
erreurs à plusieurs reprises avec mes scripts Python, en dépit de remplacer les guillemets simples. Il s'avère les caractères non-ASCII était vraiment un double tiret (--). Je l'ai remplacé avec un double tiret (--) et qu'il fixe. [Les deux auront la même apparence sur la plupart des écrans. En fonction de vos paramètres de police, la problématique, on pourrait s'intéresser un peu plus.]Pour quelqu'un rencontre le même problème dans leurs scripts Python (dans leurs lignes de code, pas dans les données chargées par votre script):
Option 1: se débarrasser de la problématique des personnages
Option 2: modifier l'encodage
Déclarer un encodage au début du script, comme Roberto a souligné:
Espère que cela aide quelqu'un.
OriginalL'auteur Fabien Snauwaert