Estoy usando Python-2.6 CGI
scripts 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
?dict
halist, 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 (sia
es 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
pandas
Pruebe el siguiente fragmento de código:
fuente
r
lugar derb
. gracias por el recordatorio para agregarb
!open
función tiene 'r' como modo de solo lectura.rb
significa modo binario de lectura.Su cadena tiene un
ascii
carácter no codificado.Es posible que no pueda decodificar
utf-8
si ha necesitado usar otras codificaciones en su código. Por ejemplo:En este caso, la codificación es
windows-1252
lo 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 byte
yinvalid continuation byte
errores 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-8
es el predeterminadoiso8859-1
Tambié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