python - 0xff - unicodedecodeerror ascii codec can t decode byte 0xf3 in position 30 ordinal not in range 128
UnicodeDecodeError: el códec ''ascii'' no puede decodificar el byte 0xe0 en la posición 0: el ordinal no está dentro del rango(128) (5)
En una de mis máquinas tengo el error cuando estoy trabajando con el motor de aplicaciones de google o django.
Por ejemplo:
app.yaml
application: demas1252c version: 1 runtime: python api_version: 1 handlers: - url: /images static_dir: images - url: /css static_dir: css - url: /js static_dir: js - url: /.* script: demas1252c.py
demas1252c.py
import cgi import wsgiref.handlers from google.appengine.ext.webapp import template from google.appengine.ext import webapp class MainPage(webapp.RequestHandler): def get(self): values = {''id'' : 10} self.response.out.write(template.render(''foto.html'', values)) application = webapp.WSGIApplication([(''/'', MainPage)], debug = True) wsgiref.handlers.CGIHandler().run(application)
foto.html
<!DOCTYPE html> <html lang="en"> <head></head> <body>some</body> </html>
mensaje de error:
C:/artefacts/dev/project>"c:/Program Files/Google/google_appengine/dev_appserver.py" foto-hosting
Traceback (most recent call last):
File "c:/Program Files/Google/google_appengine/dev_appserver.py", line 69, in <module>
run_file(__file__, globals())
File "c:/Program Files/Google/google_appengine/dev_appserver.py", line 65, in run_file
execfile(script_path, globals_)
File "c:/Program Files/Google/google_appengine/google/appengine/tools/dev_appserver_main.py", line 92, in <module>
from google.appengine.tools import dev_appserver
File "c:/Program Files/Google/google_appengine/google/appengine/tools/dev_appserver.py", line 140, in <module>
mimetypes.add_type(mime_type, ''.'' + ext)
File "C:/Python27/lib/mimetypes.py", line 344, in add_type
init()
File "C:/Python27/lib/mimetypes.py", line 355, in init
db.read_windows_registry()
File "C:/Python27/lib/mimetypes.py", line 260, in read_windows_registry
for ctype in enum_types(mimedb):
File "C:/Python27/lib/mimetypes.py", line 250, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: ''ascii'' codec can''t decode byte 0xe0 in position 0: ordinal not in range(128)
Cuando estoy trabajando con archivos estáticos en django (sin gae) tengo un error muy similar (con diferente pila).
Traté de encontrar el motivo del error y agregué el código a mimetypes.py:
print ''=====''
print ctype
ctype = ctype.encode(default_encoding) # omit in 3.x!
Luego recibo los próximos mensajes en mi consola:
=====
video/x-ms-wvx
=====
video/x-msvideo
=====
рєфшю/AMR
Traceback (most recent call last):
En el registro HKCR / Mime / Database / ContentType / Tengo cinco claves con letras rusas (cirílicas). ¿Pero cómo puedo solucionar este error?
Es un error de Python con los timos MIME latinos en el registro que comienzan a regedit e inspeccionan "HKEY_CLASSES_ROOT / MIME / Database / Content Type" para nombres que no sean latinos.
Este es un error en mimetypes
, desencadenado por datos incorrectos en el registro. ( рєфшю/AMR
no es para nada un tipo de medio MIME válido).
ctype
es un nombre de clave de registro devuelto por _winreg.EnumKey
, que mimetypes
espera ser una cadena Unicode, pero no lo es. A diferencia de _winreg.QueryValueEx
, EnumKey
devuelve una cadena de bytes (directa de la versión ANSI de la API de Windows; _winreg
en Python 2 no utiliza las interfaces Unicode aunque devuelve cadenas Unicode, por lo que nunca leerá caracteres no ANSI correctamente )
¡Así que el intento de .encode
falla con un error de decodificación Unicode al tratar de obtener una cadena Unicode antes de codificarla nuevamente en ASCII!
try:
ctype = ctype.encode(default_encoding) # omit in 3.x!
except UnicodeEncodeError:
pass
Estas líneas en mimetypes
simplemente deberían eliminarse.
Hay un parche
http://bugs.python.org/file18143/9291.patch
Funciona muy bien para mi
Simplemente reemplace UnicodeEncodeError para que sea UnicodeError
Por cierto, el principal punto culminante del problema es QuickTime, que agrega tipos no miméticos al registro de Windows. La forma más fácil de solucionarlo es encontrar y eliminar manualmente del registro las subsecciones de HKCR/Mime/Database/ContentType/
comenzando con аудио/
y видео/
.
Una solución alternativa de python issue9291 por Alexandr Zarubkin (me21) :
agregue el archivo llamado sitecustomize.py en la carpeta Lib / site-packages.
import sys
sys.setdefaultencoding("cp1251")