Pourquoi ne pas en Python afficher ce texte correctement? (UTF-8 Décodage de l'Émission)
import urllib.request as u
zipcode = str(47401)
url = 'http://watchdog.net/us/?zip=' + zipcode
con = u.urlopen(url)
page = str(con.read())
value3 = int(page.find("<title>")) + 7
value4 = int(page.find("</title>")) - 15
district = str(page[value3:value4])
print(district)
newdistrict = district.replace("\xe2\x80\x99","'")
print(newdistrict)
Pour une raison quelconque, mon code est en tirant dans le titre dans le format suivant: IN-09: Indiana\xe2\x80\x99s 9th
. Je sais que le \xe
chaîne de caractères unicode pour l' '
symbole, mais je ne peux pas comprendre comment obtenir python pour remplacer cet ensemble de caractères avec la '
symbole. J'ai essayé de décodage de la chaîne, mais c'est déjà en unicode et le remplacer le code ci-dessus ne change rien. Aucun conseil sur ce que je fais mal?
Avez-vous essayé d'utiliser
Je ne suis pas entièrement sûr de ce que tu veux dire par là, pourriez-vous nous fournir un peu plus d'informations?
Ce n'est pas
Voyant que vous êtes en utilisant
Yup, à l'aide de Python 3. C'est bizarre, même si je ne un quartier.find("\xe2\x80\x99"), la valeur de l'attribution est -1, ce qui implique qu'il n'est pas de trouver une chaîne de caractères dans le district variable, même si c'est de l'imprimer sur l'écran lorsque la fonction d'impression est appelé.
unicode
littéraux?Je ne suis pas entièrement sûr de ce que tu veux dire par là, pourriez-vous nous fournir un peu plus d'informations?
Ce n'est pas
'
, c'est ’
(U+2019, DROIT guillemet SIMPLE).Voyant que vous êtes en utilisant
urllib.request
, je présume que vous êtes à l'aide de Python 3.Yup, à l'aide de Python 3. C'est bizarre, même si je ne un quartier.find("\xe2\x80\x99"), la valeur de l'attribution est -1, ce qui implique qu'il n'est pas de trouver une chaîne de caractères dans le district variable, même si c'est de l'imprimer sur l'écran lorsque la fonction d'impression est appelé.
OriginalL'auteur user1353035 | 2012-04-24
Vous devez vous connecter pour publier un commentaire.
Lorsque vous appelez
con.text()
, cela renvoie unebytes
objet. L'appel destr()
sur elle retourne une chaîne de caractères de la représentation de celui - ci- ainsi, les évasions sont utilisés plutôt que les personnages réels, si vous ne spécifiez pas de l'encodage. (Cela signifie que votre chaîne se termine contenant\\xe2\\x80\\x99
ainsi que toutes sortes d'autres choses indésirables.)bytes
est la plupart du temps commestr
en Python 2: il n'a pas de codage de l'information stockée.str
en Python 3, c'est commeunicode
en Python 2; il a l'encodage. Ainsi, lors du tournage d'unbytes
objet dans unstr
objet, vous devez dire quel encodage il est en fait dans. Dans ce cas, c'estutf-8
.Au lieu de l'appeler
str()
, il serait préférable d'utiliserbytes.decode
; c'est la même chose, juste plus lisible.La seule modification fonctionnelle qui a été fait ici est la spécification de décoder le
bytes
objet comme'utf-8'
.Fondamentalement, il s'agit du fait que
str(b'\xab')
produit"b'\\xab'"
au lieu de'\xab'
(c'est l'équivalent de "repr(b'\xab') comme il n'y a pas de véritable conversion sans spécifier l'encodage).OriginalL'auteur Chris Morgan
essayer cette
je pense que vous êtes en utilisant utf-8, il devrait ressembler à ceci
mais ce n'est pas la bonne pourquoi travailler avec unicode.
une fois que votre texte est importé dans le programme, vous devez travailler en unicode tous sur la place
sauf peut-être lors de la sortie de la sortie devrait envisager la destination externe
donc mieux pourquoi ajouter la ligne en haut de votre script
de vous lire à l'entrée en utf-8
et puis ne
newdistrict = district.remplacer(u"YOUR_UNICODE_STRING","'")
par exemple
pour plus d'aider à lire ce
http://docs.python.org/howto/unicode.html
OriginalL'auteur jojo