[python] UnicodeDecodeError: el códec 'ascii' no puede decodificar el byte 0xef en la posición 1



6 Answers

tratar:

string.decode('utf-8')  # or:
unicode(string, 'utf-8')

editar:

'(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'.decode('utf-8') da u'(\uff61\uff65\u03c9\uff65\uff61)\uff89' , que es correcto.

por lo que su problema debe estar en algún otro lugar, posiblemente si intenta hacer algo con él si hubiera una conversión implícita (podría ser imprimir, escribir en una transmisión ...)

para decir más, necesitaremos ver algún código.

Question

Estoy teniendo algunos problemas al intentar codificar una cadena para UTF-8. He intentado varias cosas, incluido el uso de string.encode('utf-8') y unicode(string) , pero me sale el siguiente error:

UnicodeDecodeError: el códec 'ascii' no puede decodificar byte 0xef en posición 1: ordinal no en rango (128)

Esta es mi cadena:

(。・ω・。)ノ

No veo lo que está pasando, ¿alguna idea?

Editar: El problema es que imprimir la cadena tal como está no se muestra correctamente. Además, este error cuando intento convertirlo:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)



Si está trabajando en un host remoto , consulte /etc/ssh/ssh_config en su PC local .

Cuando este archivo contiene una línea:

SendEnv LANG LC_*

coméntelo agregando # al principio de la línea. Podría ayudar.

Con esta línea, ssh envía las variables de entorno relacionadas con el lenguaje de su PC al host remoto . Causa muchos problemas.




esto funciona para ubuntu 15.10:

sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales



Recibí el mismo tipo de error y descubrí que la consola no puede mostrar la cadena en otro idioma. Por lo tanto, hice los cambios de código a continuación para establecer default_charset como UTF-8.

data_head = [('\x81\xa1\x8fo\x89\xef\x82\xa2\x95\xdb\x8f\xd8\x90\xa7\x93x\x81\xcb3\x8c\x8e\x8cp\x91\xb1\x92\x86(\x81\x86\x81\xde\x81\x85)\x81\xa1\x8f\x89\x89\xf1\x88\xc8\x8aO\x81A\x82\xa8\x8b\xe0\x82\xcc\x90S\x94z\x82\xcd\x88\xea\x90\xd8\x95s\x97v\x81\xa1\x83}\x83b\x83v\x82\xcc\x82\xa8\x8e\x8e\x82\xb5\x95\xdb\x8c\xaf\x82\xc5\x8fo\x89\xef\x82\xa2\x8am\x92\xe8\x81\xa1', 'shift_jis')]
default_charset = 'UTF-8' #can also try 'ascii' or other unicode type
print ''.join([ unicode(lin[0], lin[1] or default_charset) for lin in data_head ])



Resuelvo ese problema cambiando en el archivo settings.py con 'ENGINE': 'django.db.backends.mysql', no uso 'ENGINE': 'mysql.connector.django',




BOM, a menudo es BOM para mí

vi el archivo, use

:set nobomb

y guárdalo Eso casi siempre lo arregla en mi caso




Intente configurar la codificación predeterminada del sistema como utf-8 al comienzo de la secuencia de comandos, de modo que todas las cadenas estén codificadas con eso.

import sys
reload(sys)
sys.setdefaultencoding('utf-8')



Related