2017-06-19 4 views
0

Je sélectionne des valeurs à partir d'un MySQL // Maria DB qui contient le jeu de caractères latin1 avec le classement latin1_swedish_ci. Il y a des caractères possibles de différentes langues européennes comme l'espagnol ñ, l'allemand ä ou le norvégien ø.Problème de codage Python 3 caractères

Je reçois les données avec

#!/usr/bin/env python3 
# coding: utf-8 

... 
sql.execute("SELECT name FROM myTab") 
for row in sql 
print(row[0]) 

Il y a un message d'erreur: UnicodeEncodeError: 'ascii' codec ne peut pas encoder le caractère '\ xf1' Ok j'ai changé mon impression à

print(str(row[0].encode('utf8'))) 

et le résultat ressemble à ceci: b '\ xc3 \ xB1' je regardais cette Working with utf-8 encoding in Python source mais j'ai Declard l'en-tête. Aussi decode('utf8').encode('cp1250') n'aide pas

+0

merci de soutenir. cela retourne 'UnicodeDecodeError: le codec 'utf-8' ne peut pas décoder l'octet 0xf1 en position 0' –

+0

Possible dupliquer de [Comment définir l'encodage de sys.stdout dans Python 3?] (https://stackoverflow.com/questions/4374455/how-to-set-sys-stdout-encoding-in-python-3) –

Répondre

0

okay le problème de codage a été résolu définitivement. Coldspeed a donné une biche importante avec loacle. donc tous les félicitations pour lui! Malheureusement, ce n'était pas si facile.

J'ai trouvé une solution de contournement qui résout le problème. La solution provient de Jack O'Connor. posté dans this answer:

1

Python3 essaie de décoder automatiquement cette chaîne en fonction de vos paramètres régionaux. Si vos paramètres régionaux ne correspondent pas à l'encodage de la chaîne, vous obtenez du texte tronqué ou cela ne fonctionne pas du tout. Vous pouvez essayer de l'encoder de force avec votre locale, puis décoder en cp1252 (il semble que ce soit l'encodage sur la chaîne).

print(row[0].encode('latin-1').decode('cp1252')) 
+0

semble le point avec les paramètres locaux vers l'objectif. Malheureusement, votre approche n'apporte toujours pas la bonne solution. Mais avec locale je me rapproche. –

+0

@JoePlatano qu'en est-il de 'row [0] .encode ('latin-1'). Decode ('utf-8')'? –

+0

non ne fonctionne pas, eh bien sur shell si j'exécute le script en tant que script python.py ça marche. Sur le serveur web non. J'ai ajouté les lignes suivantes 'print (sys.stdout.encoding)' et 'print (sys.getdefaultencoding())' dans shell il y a utf-8 pour les deux. si j'exécute le script sur le navigateur, il y a ANSI_X3.4-1968 pour sys.stdout.encoding et utf-8 pour sys.getdefaultencoding(). Je pense qu'il ya un problème de locale sur apache –