En una aplicación web (usando Frasco), me sale el siguiente error:extraño `` UnicodeEncodeError` usando os.path.exists`
Unable to retrieve the thumbnail for u'/var/data/uploads/2012/03/22/12 Gerd\xb4s Banjo Trio 1024.jpg'
Traceback (most recent call last):
File "/var/www/beta/env/lib/python2.7/site-packages/dblib-1.0dev3-py2.7.egg/dblib/orm/file.py", line 169, in get_thumbnail
if not exists(filename):
File "/usr/lib/python2.7/genericpath.py", line 18, in exists
os.stat(path)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb4' in position 52: ordinal not in range(128)
Tenga en cuenta que incluyo la repr()
del nombre de archivo en el error registrado Esto muestra que el nombre del archivo se pasa como una instancia de Unicode. Tanto es correcta ...
Si funciono el culpable usando el intérprete de Python, funciona como se esperaba:
>>> from os.path import exists
>>> exists(u'/var/data/uploads/2012/03/22/12 Gerd\xb4s Banjo Trio 1024.jpg')
True
Así que, obviamente, mientras se ejecuta en el entorno Frasco, Python cree que debería codificar el archivo -name utilizando el códec ASCII en lugar de UTF-8. Implementé la aplicación usando mod_wsgi detrás del Apache httpd.
Supongo que tengo que decirle a cualquiera de ellos que use UTF-8 en alguna parte? ¿Pero donde?
No creo que esta es la solución correcta, pero cuando en situaciones similares Me encuentro con 'string' .encode ('utf8') hace el truco - podría valer la pena intentarlo. –
Estoy seguro de que es un problema de configuración. Así que, hasta que descubrí la configuración correcta, simplemente la protegí con un bloque try/except y me acribillaba con correos electrónicos cada vez que ocurría: P Es un error y quiero que me lo recuerden :) – exhuma