Je lis dans un fichier CSV qui a UTF8 encodage:lecture UTF8 codé CSV et la conversion en UTF-16
ifile = open(fname, "r")
for row in csv.reader(ifile):
name = row[0]
print repr(row[0])
Cela fonctionne bien, et imprime ce que je pense à imprimer; un UTF8 codé str
:
> '\xc3\x81lvaro Salazar'
> '\xc3\x89lodie Yung'
...
De plus, lorsque j'imprime simplement le str
(par opposition à repr()
) la sortie affiche ok (que je ne comprends pas Eitherway - devrait pas provoquer une erreur?):
> Álvaro Salazar
> Élodie Yung
mais lorsque je tente de convertir mon UTF8 codé strs
-unicode
:
ifile = open(fname, "r")
for row in csv.reader(ifile):
name = row[0]
print unicode(name, 'utf-8') # or name.decode('utf-8')
Je reçois l'inf amous:
Traceback (most recent call last):
File "scripts/script.py", line 33, in <module>
print unicode(fullname, 'utf-8')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc1' in position 0: ordinal not in range(128)
Je regardé les chaînes unicode qui sont créés:
ifile = open(fname, "r")
for row in csv.reader(ifile):
name = row[0]
unicode_name = unicode(name, 'utf-8')
print repr(unicode_name)
et la sortie est
> u'\xc1lvaro Salazar'
> u'\xc9lodie Yung'
Alors maintenant, je suis tout à fait confus que ceux-ci semblent être valeurs hexagonales mutilées. J'ai lu cette question:
et correctement apparaît que je fais tout, me conduit à croire que mon dossier est pas réellement UTF8, mais quand j'imprime d'abord les valeurs repr
des cellules, ils semblent corriger les valeurs hexadécimales UTF8. Quelqu'un peut-il soit signaler mon problème ou d'indiquer où ma compréhension se délite (comme je commence à se perdre dans la jungle des encodages)
En aparté, je crois que je pourrais utiliser codecs
pour ouvrir la fichier et le lire directement dans les objets Unicode, mais le module csv
ne prend pas en charge unicode natif afin que je puisse utiliser cette approche.
Hey merci. Cela a beaucoup aidé. Tout commence à se mettre en place - comment python (et l'interpréteur + stdout) gère unicode etc ... me confondait mais je pense que c'est clair maintenant. Cette vidéo est également excellente. –