¿Por qué falla el siguiente artículo? ¿Y por qué tiene éxito con el códec "latin-1"?
o = "a test of \xe9 char" #I want this to remain a string as this is what I am receiving
v = o.decode("utf-8")
resultados en:
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 0xe9 in position 10: invalid continuation byte
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
error en el uso.encode(latin-1)
Tuve el mismo error cuando intenté abrir un archivo csv con el método pandas read_csv.
La solución fue cambiar la codificación a 'latin-1':
fuente
No es válido UTF-8. Ese carácter es el carácter e-agudo en ISO-Latin1, por lo que tiene éxito con ese conjunto de códigos.
Si no conoce el conjunto de códigos en el que está recibiendo las cadenas, está en problemas. Sería mejor si se eligiera un único conjunto de códigos (con suerte UTF-8) para su protocolo / aplicación y luego simplemente rechazaría los que no decodificaron.
Si no puede hacer eso, necesitará heurística.
fuente
Debido a que UTF-8 es multibyte y no hay caracteres correspondientes a su combinación de
\xe9
más espacio siguiente.¿Por qué debe tener éxito en tanto UTF-8 y latino-1?
Aquí, cómo debería ser la misma oración en utf-8:
fuente
Si surge este error al manipular un archivo que acaba de abrir, verifique si lo abrió en
'rb'
modofuente
soup = BeautifulSoup(open('webpage.html', 'rb'), 'html.parser')
Esto también me sucedió a mí mientras estaba leyendo un texto que contenía hebreo de un
.txt
archivo.Hice clic:
file -> save as
y guardé este archivo comoUTF-8
codificaciónfuente
El error de código utf-8 generalmente se produce cuando el rango de valores numéricos que excede de 0 a 127.
La razón para plantear esta excepción es:
1) Si el punto de código es <128, cada byte es el mismo que el valor del punto de código. 2) Si el punto de código es 128 o mayor, la cadena Unicode no se puede representar en esta codificación. (Python genera una excepción UnicodeEncodeError en este caso).
Para superar esto, tenemos un conjunto de codificaciones, la más utilizada es "Latin-1, también conocida como ISO-8859-1"
Entonces, los puntos ISO-8859-1 Unicode 0–255 son idénticos a los valores de Latin-1, por lo que la conversión a esta codificación simplemente requiere convertir puntos de código en valores de bytes; Si se encuentra un punto de código mayor que 255, la cadena no se puede codificar en Latin-1
cuando se produce esta excepción cuando intenta cargar un conjunto de datos, intente utilizar este formato
Agregue la técnica de codificación al final de la sintaxis que luego acepta cargar el conjunto de datos.
fuente
Use esto, si muestra el error de UTF-8
fuente
En este caso, intenté ejecutar un .py que activa una ruta / file.sql.
¡Mi solución fue modificar la codificación del archivo.sql a "UTF-8 sin BOM" y funciona!
Puedes hacerlo con Notepad ++.
Dejaré una parte de mi código.
/ Código /
con = psycopg2.connect (host = sys.argv [1], puerto = sys.argv [2], nombrebd = sys.argv [3], usuario = sys.argv [4], contraseña = sys.argv [5] )
cursor = con.cursor () sqlfile = open (ruta, 'r')
fuente