Pourquoi l'élément ci-dessous échoue? et pourquoi réussit-il avec le codec "latin-1"?
o = "a test of \xe9 char" #I want this to remain a string as this is what I am receiving
v = o.decode("utf-8")
résulte en:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py",
line 16, in decode
return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError:
'utf8' codec can't decode byte 0xe9 in position 10: invalid continuation byte
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
erreur lors de l'utilisation.encode(latin-1)
J'ai eu la même erreur lorsque j'ai essayé d'ouvrir un fichier csv par la méthode read_csv de pandas.
La solution a été de changer l'encodage en «latin-1»:
la source
Il n'est pas valide UTF-8. Ce caractère est le caractère e-aigu dans ISO-Latin1, c'est pourquoi il réussit avec ce jeu de codes.
Si vous ne connaissez pas le jeu de codes dans lequel vous recevez des chaînes, vous avez un peu de mal. Il serait préférable qu'un seul jeu de codes (espérons-le UTF-8) soit choisi pour votre protocole / application, puis vous rejetteriez simplement ceux qui n'ont pas été décodés.
Si vous ne pouvez pas faire cela, vous aurez besoin d'heuristiques.
la source
Parce que UTF-8 est multi-octets et qu'il n'y a pas de caractère correspondant à votre combinaison de
\xe9
espace plus suivant.Pourquoi devrait-il réussir à la fois en utf-8 et en latin-1?
Voici comment la même phrase devrait être dans utf-8:
la source
Si cette erreur survient lors de la manipulation d'un fichier qui vient d'être ouvert, vérifiez si vous l'avez ouvert en
'rb'
modela source
soup = BeautifulSoup(open('webpage.html', 'rb'), 'html.parser')
Cela m'est arrivé aussi, alors que je lisais du texte contenant l'hébreu d'un
.txt
fichier.J'ai cliqué:
file -> save as
et j'ai enregistré ce fichier en tantUTF-8
qu'encodagela source
L'erreur de code utf-8 survient généralement lorsque la plage de valeurs numériques dépasse 0 à 127.
la raison de lever cette exception est:
1) Si le point de code est <128, chaque octet est identique à la valeur du point de code. 2) Si le point de code est 128 ou supérieur, la chaîne Unicode ne peut pas être représentée dans cet encodage. (Python déclenche une exception UnicodeEncodeError dans ce cas.)
Afin de surmonter cela, nous avons un ensemble d'encodages, le plus largement utilisé est "Latin-1, également connu sous le nom ISO-8859-1"
Ainsi, les points Unicode ISO-8859-1 0–255 sont identiques aux valeurs Latin-1, donc la conversion vers ce codage nécessite simplement de convertir les points de code en valeurs d'octets; si un point de code supérieur à 255 est rencontré, la chaîne ne peut pas être codée en latin-1
lorsque cette exception se produit lorsque vous essayez de charger un ensemble de données, essayez d'utiliser ce format
Ajoutez une technique d'encodage à la fin de la syntaxe qui accepte ensuite de charger l'ensemble de données.
la source
Utilisez ceci, s'il montre l'erreur d'UTF-8
la source
Dans ce cas, j'ai essayé d'exécuter un .py qui active un chemin / fichier.sql.
Ma solution a été de modifier la codification du fichier.sql en "UTF-8 sans BOM" et ça marche!
Vous pouvez le faire avec Notepad ++.
je vais laisser une partie de mon code.
/ Code /
con = psycopg2.connect (host = sys.argv [1], port = sys.argv [2], dbname = sys.argv [3], user = sys.argv [4], mot de passe = sys.argv [5] )
cursor = con.cursor () sqlfile = open (chemin, 'r')
la source