Comment travailler avec unicode Python
Je suis en train de nettoyer tout le code HTML d'une chaîne de sorte que le résultat final est un fichier texte. J'ai quelques recherches sur les différents "convertisseurs" et je commence à pencher vers la création de mon propre dictionnaire pour les entités et les symboles et l'exécution d'un remplacement sur la chaîne. Je pense que je veux automatiser le processus et il y a beaucoup de variabilité dans la qualité de l'html sous-jacent. Pour commencer la comparaison de la vitesse de ma solution et l'une des solutions de rechange par exemple pyparsing j'ai décidé de tester de remplacer \xa0 l'aide de la méthode de chaîne à remplacer. Je reçois un
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
La ligne de code a été
s=unicodestring.replace('\xa0','')
De toute façon j'ai décidé que j'avais besoin de la faire précéder d'une r alors, j'ai couru cette ligne de code:
s=unicodestring.replace(r'\xa0','')
Il s'exécute sans erreur, mais j'ai quand je regarde une tranche de s je vois que l' \xaO est toujours là
Parce que j'essayais de deviner pourquoi j'ai obtenu l'erreur et je sais que parfois, à force de le \ à lire que vous avez à faire un littéral de chaîne et aussi le \xa0 est ce qui existe réellement dans ma source. qu'est-ce que le code hex a0?
OriginalL'auteur PyNEwbie | 2009-04-15
Vous devez vous connecter pour publier un commentaire.
peut-être que vous devriez faire
je pense que les chaînes de caractères entre guillemets simples sont ascii.. donc '\xa0' déclenche une exception..
OriginalL'auteur z33m
..est d'essayer de créer le caractère unicode
\xa0
, ce qui n'est pas valide dans la table ASCII sctring (la valeur par défaut type chaîne de caractères en Python jusqu'à la version 3.x)La raison
r'\xa0'
n'a pas erreur parce que dans une chaîne brute, les séquences d'échappement n'ont aucun effet. Plutôt que d'essayer de coder\xa0
dans le caractère unicode, il a vu la chaîne comme un "backslash", "littéral x" et ainsi de suite..Suivantes sont les mêmes:
C'est quelque chose de résolu en Python v3, selon le type de chaîne par défaut est en unicode, de sorte que vous pouvez faire..
Je vous recommande fortement de BeautifulSoup pour cela. L'écriture HTML, outil de nettoyage est difficile (en raison de sa plus horrible HTML), et de BeautifulSoup fait un excellent travail à la fois de l'analyse HTML, et de traiter avec Unicode..
Je ne suis pas sûr de ce que tu veux dire? Vous pouvez supprimer HTML via de nombreuses façons, à partir du premier tableau dans un div, par classe ou id etc..
BeautifulSoup.prettyify() a été un épargnant de vie! Merci!
OriginalL'auteur dbr
Regarder la codecs de la bibliothèque standard, plus précisément le encoder et décoder méthodes fournies dans le Codec de la classe de base.
Il y a aussi un bon article ici qui met tout cela ensemble.
OriginalL'auteur Wayne Koorts
Au lieu de cela, il est préférable d'utiliser les standards de python fonctionnalités.
Par exemple:
ou
où
replace
remplacera\xa0
à\\xa0
.Mais si
\xa0
est vraiment pas de sens pour vous et que vous souhaitez la supprimer ensuite utiliserignore
.OriginalL'auteur Tejas Tank
Juste une remarque concernant HTML de nettoyage. C'est très très dur, car
Est un moyen valable à écrire en HTML. Juste un avis.
OriginalL'auteur Ólafur Waage
Vous pouvez les convertir au format unicode de cette façon:
OriginalL'auteur Jason Coon