Estoy leyendo y analizando un archivo XML de Amazon y mientras el archivo XML muestra un ', cuando intento imprimirlo aparece el siguiente error:
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
Por lo que he leído en línea hasta ahora, el error proviene del hecho de que el archivo XML está en UTF-8, pero Python quiere manejarlo como un carácter codificado en ASCII. ¿Existe una forma sencilla de hacer que el error desaparezca y hacer que mi programa imprima el XML mientras se lee?
unicode()
?Respuestas:
Probablemente, su problema es que lo analizó bien, y ahora está intentando imprimir el contenido del XML y no puede porque hay algunos caracteres Unicode extranjeros. Intente codificar su cadena unicode como ascii primero:
la parte 'ignorar' le dirá que se salte esos caracteres. De los documentos de Python:
Es posible que desee leer este artículo: http://www.joelonsoftware.com/articles/Unicode.html , que encontré muy útil como tutorial básico sobre lo que está sucediendo. Después de la lectura, dejará de sentirse como si estuviera adivinando qué comandos usar (o al menos eso me pasó a mí).
fuente
.encode('ascii', 'ignore')
pierde datos innecesariamente incluso si el entorno de OP puede admitir caracteres que no son ascii (la mayoría de los casos)Una mejor solucion:
Si desea leer más sobre por qué:
http://docs.plone.org/manage/troubleshooting/unicode.html#id1
fuente
u'\u2019
ya es Unicode.No codifique la codificación de caracteres de su entorno dentro de su script; imprima texto Unicode directamente en su lugar:
Si su salida se redirige a un archivo (o una tubería); podría usar
PYTHONIOENCODING
envvar, para especificar la codificación de caracteres:De lo contrario,
python your_script.py
debería funcionar como es - los valores de localización se utilizan para codificar el texto (en el cheque POSIX:LC_ALL
,LC_CTYPE
,LANG
envvars - conjuntoLANG
a una localización UTF-8 si es necesario).Para imprimir Unicode en Windows, vea esta respuesta que muestra cómo imprimir Unicode en la consola de Windows, en un archivo o usando IDLE .
fuente
Excelente publicación: http://www.carlosble.com/2010/12/understanding-python-and-unicode/
fuente
Puedes usar algo de la forma
que convertirá una cadena de bytes codificada en UTF-8 en una cadena Unicode de Python. Pero el procedimiento exacto a usar depende de cómo cargue y analice exactamente el archivo XML, por ejemplo, si nunca accede a la cadena XML directamente, es posible que deba usar un objeto decodificador del
codecs
módulo .fuente
'...'.encode('utf-8')
Escribí lo siguiente para corregir las molestas citas que no son ASCII y forzar la conversión a algo utilizable.
fuente
Si necesita imprimir una representación aproximada de la cadena en la pantalla, en lugar de ignorar esos caracteres no imprimibles, pruebe el
unidecode
paquete aquí:https://pypi.python.org/pypi/Unidecode
La explicación se encuentra aquí:
https://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
Esto es mejor que usar el
u.encode('ascii', 'ignore')
para una cadena determinadau
y puede ahorrarle dolores de cabeza innecesarios si la precisión de los caracteres no es lo que busca , pero aún desea tener legibilidad humana.Wirawan
fuente
Intente agregar la siguiente línea en la parte superior de su secuencia de comandos de Python.
fuente
Python 3.5, 2018
Si no sabe cuál es la codificación, pero el analizador Unicode tiene problemas, puede abrir el archivo
Notepad++
y seleccionar en la barra superiorEncoding->Convert to ANSI
. Entonces puedes escribir tu pitón asífuente