Estoy usando Python-2.6 CGIscripts pero encontré este error en el registro del servidor mientras lo hacía json.dumps(),
Traceback (most recent call last):
File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module>
print json.dumps(__getdata())
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte
Aqui
__getdata()La función vuelve dictionary {}.
Antes de publicar esta pregunta, me he referido a esta pregunta de SO.
ACTUALIZACIONES
La siguiente línea está dañando el codificador JSON,
now = datetime.datetime.now()
now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ')
print json.dumps({'current_time': now}) // this is the culprit
Tengo una solución temporal para ello
print json.dumps( {'old_time': now.encode('ISO-8859-1').strip() })
Pero no estoy seguro de si es la forma correcta de hacerlo.

dict?dicthalist, dict, python timestamp value__getdata. No sé por qué estás obteniendo un personaje no decodificable. Puedes intentar crear parches en el dict para que funcione, pero en su mayoría solo piden más problemas más adelante. Intentaría imprimir el dict para ver dónde está el personaje no ascii. Luego descubra cómo se calculó / estableció ese campo y trabaje hacia atrás desde allí.Respuestas:
El error se debe a que hay algunos caracteres no ascii en el diccionario y no puede codificarse / decodificarse. Una forma simple de evitar este error es codificar tales cadenas con la
encode()función siguiente (siaes la cadena con caracteres no ascii):fuente
Cambié esto simplemente definiendo un paquete de códec diferente en el
read_csv()comando:encoding = 'unicode_escape'P.ej:
fuente
pandasPruebe el siguiente fragmento de código:
fuente
rlugar derb. gracias por el recordatorio para agregarb!openfunción tiene 'r' como modo de solo lectura.rbsignifica modo binario de lectura.Su cadena tiene un
asciicarácter no codificado.Es posible que no pueda decodificar
utf-8si ha necesitado usar otras codificaciones en su código. Por ejemplo:En este caso, la codificación es
windows-1252lo que debe hacer:Ahora que lo tienes
Unicode, puedes codificarlo de forma segurautf-8.fuente
En la lectura
csv, agregué un método de codificación:fuente
Establezca el codificador predeterminado en la parte superior de su código
fuente
A partir de 2018-05, esto se maneja directamente con
decode, al menos para Python 3 .Estoy usando el fragmento de abajo para
invalid start byteyinvalid continuation byteerrores de tipo. Agregar loerrors='ignore'arregló para mí.fuente
Inspirado por @aaronpenne y @Soumyaansh
fuente
Esta solución funcionó para mí:
fuente
Solución simple:
fuente
La siguiente línea está dañando el codificador JSON,
Tengo una solución temporal para ello
Marcar esto como correcto como una solución temporal (no estoy seguro).
fuente
Si los métodos anteriores no funcionan para usted, puede considerar cambiar la codificación del archivo csv.
Usando Excel:
Usando el Bloc de notas:
Al hacer esto, debería poder importar archivos csv sin encontrar el UnicodeCodeError.
fuente
Después de probar todas las soluciones antes mencionadas, si aún arroja el mismo error, puede intentar exportar el archivo como CSV (una segunda vez si ya lo ha hecho). Especialmente si está utilizando scikit learn, es mejor importar el conjunto de datos como un archivo CSV.
Pasé horas juntos, mientras que la solución era así de simple. Exporte el archivo como CSV al directorio donde están instalados Anaconda o sus herramientas de clasificación e inténtelo.
fuente
Puede usar cualquier codificación estándar de su uso y entrada específicos.
utf-8es el predeterminadoiso8859-1También es popular para Europa occidental.p.ej:
bytes_obj.decode('iso8859-1')ver: documentos
fuente
En lugar de buscar formas de decodificar a5 (Yen
¥) o 96 (en-dash–), dígale a MySQL que su cliente está codificado "latin1", pero desea "utf8" en la base de datos.Ver detalles en Problemas con los caracteres UTF-8; lo que veo no es lo que almacené
fuente