xc3 xad unicodedecodeerror start invalid bytes acentos 0xff python json

python - xad - unicodedecodeerror: ''utf-8'' codec can''t decode byte 0xff in position 0: invalid start byte



UnicodeDecodeError: el códec ''utf8'' no puede decodificar el byte 0xa5 en la posición 0: byte de inicio no válido (12)

Estoy usando secuencias de comandos Python-2.6 CGI pero encontré este error en el registro del servidor mientras hago json.dumps() ,

Traceback (most recent call last): File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module> print json.dumps(​​__get​data()) 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

Aquí,

​__get​data() función devuelve el dictionary {} .

Antes de publicar esta pregunta, he referido this a la pregunta OS 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 eso

print json.dumps( {''old_time'': now.encode(''ISO-8859-1'').strip() })

Pero no estoy seguro de que sea la forma correcta de hacerlo.


A continuación, primero debe cargar el archivo "GoogleNews-vectors-negative300.bin.gz" y luego extraerlo mediante este comando en Ubuntu: gunzip -k GoogleNews-vectors-negative300.bin.gz. [la extracción manual nunca se recomienda]. en segundo lugar, debe aplicar estos comandos en pyrhon 3:

import gensim model = gensim.models.Word2Vec.load_word2vec_format(''./model/GoogleNews-vectors-negative300.bin'', binary=True) Espero que sea útil.


Cambié esto simplemente definiendo un paquete de códec diferente en el comando read_csv ()

encoding = ''unicode_escape''


Configura el codificador predeterminado en la parte superior de tu código

import sys reload(sys) sys.setdefaultencoding("ISO-8859-1")


Después de probar todas las soluciones provisionales antes mencionadas, si todavía arroja el mismo error, puede intentar exportar el archivo como CSV (una segunda vez si ya lo hizo). 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 fue así de simple. Exporte el archivo como un archivo CSV al directorio donde Anaconda o sus herramientas de clasificación están instaladas y pruebe.


El error se debe a que hay algún carácter no ascii en el diccionario y no se puede codificar / descodificar. Una manera simple de evitar este error es codificar tales cadenas con la función encode() siguiente manera (si a es la cadena con carácter no ascii):

a.encode(''utf-8'').strip()


Generalmente hablando,

Python arroja un error de este tipo cuando se intenta leer un tipo de objeto ilegal como un archivo.

p.ej

file = open("xyz.pkl", "r") text= file.read()

la segunda línea arrojará el error anterior:

UnicodeDecodeError: el códec ''utf-8'' no puede decodificar el byte 0x80 en la posición 0: byte de inicio no válido

Posible lectura de .npy de manera similar también arrojará este tipo de error


Inspirado por aaronpenne y Soumyaansh

f = open("file.txt","rb") text = f.read().decode(errors=''replace'')


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 eso

print json.dumps( {''old_time'': now.encode(''ISO-8859-1'').strip() })

Marcado esto como correcto como una solución temporal (No estoy seguro).


Pruebe el siguiente fragmento de código:

with open(path, ''rb'') as f: text = f.read()


Solo en mi caso, si guardo el archivo xslx excel como CSV (delimitado por comas), aparecerá el error. Sin embargo, cuando guardo es como CSV (MS-DOS), el error no vendrá.


Su cadena tiene un carácter no ascii codificado en ella.

No poder decodificar con utf-8 puede suceder si necesita usar otras codificaciones en su código. Por ejemplo:

>>> ''my weird character /x96''.decode(''utf-8'') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:/Python27/lib/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: ''utf8'' codec can''t decode byte 0x96 in position 19: invalid start byte

En este caso, la codificación es windows-1252 por lo que debe hacer:

>>> ''my weird character /x96''.decode(''windows-1252'') u''my weird character /u2013''

Ahora que tiene Unicode, puede codificar de forma segura en utf-8.


A partir de 2018-05 esto se maneja directamente con decode , al menos para Python 3 .

Estoy utilizando el fragmento a continuación después de obtener invalid start byte invalid continuation byte y errores de tipo de invalid continuation byte . Agregar errors=''ignore'' solucionó por mí.

with open(out_file, ''rb'') as f: for line in f: print(line.decode(errors=''ignore''))