[pyar] Codecs, UTF-8
Alejandro Santos
listas en alejolp.com
Mie Oct 13 13:13:24 ART 2010
2010/10/12 Martin Cerdeira <martincerdeira en gmail.com>:
>
> Este es el trace completo del error actual:
>
> E:\HOME\Python\Qt\Html>main.py
> Traceback (most recent call last):
> File "E:\HOME\Python\Qt\Html\main.py", line 22, in on_FileOpen_triggered
> self.web.setHtml(codecs.open(fname, "r", "utf-8" ).read())
> File "C:\Python26\lib\codecs.py", line 865, in open
> file = __builtin__.open(filename, mode, buffering)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xf3 in position 24: ordinal
> not in range(128)
>
> Ahora, a raiz de que me dijiste que era imposible que diera el error
> con el open, me puse a ver otras cosas y, noté algo que no había
> notado. El path al archivo tiene un tilde. Es decir:
>
> fname = QtGui.QFileDialog.getOpenFileName(self, filter="*.html")
> print fname
>
> Falla si la carpeta se llama, por ejemplo, "Computación"
>
> No entiendo exactamente por qué falla, ya que le estoy poniendo que es
> utf-8. A lo sumo, fname debería tener la palabra computación con un
> caracter raro en vez de la ó. O, eso es lo que esperaría, pero no.
>
Falla porque el nombre de archivo esta en un encoding que Python no
puede entender. No importa el encoding que le digas al modulo codecs,
el fallo está _antes_ de que se tenga en cuenta ese parametro.
Por un lado, en Windows el encoding por defecto de IDLE es:
# -*- coding: cp1252 -*-
Por el otro, para poder manejar correctamente nombres de archivos con
acentos tenes que usar sys.getfilesystemencoding():
http://docs.python.org/library/sys.html#sys.getfilesystemencoding
Por ejemplo:
import codecs, sys
archivo = u"c:/á.txt"
print codecs.open(archivo.encode(sys.getfilesystemencoding()), 'r', 'utf-8')
Suponiendo que "archivo" es un string Unicode, deberia funcionar.
--
Alejandro Santos
http://alejolp.com.ar
More information about the pyar
mailing list