unicodeencodeerror unicodedecodeerror remove not characters 0xc3 python unicode ascii encode

python - remove - unicodedecodeerror ascii codec can t decode byte 0xc3 in position 6 ordinal not in range 128



Python Unicode Encode Error (8)

Escribí lo siguiente para corregir las molestas citas que no son ascii y forzar la conversión a algo utilizable.

unicodeToAsciiMap = {u''/u2019'':"''", u''/u2018'':"`", } def unicodeToAscii(inStr): try: return str(inStr) except: pass outStr = "" for i in inStr: try: outStr = outStr + str(i) except: if unicodeToAsciiMap.has_key(i): outStr = outStr + unicodeToAsciiMap[i] else: try: print "unicodeToAscii: add to map:", i, repr(i), "(encoded as _)" except: print "unicodeToAscii: unknown code (encoded as _)", repr(i) outStr = outStr + "_" return outStr

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)

De 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. ¿Hay alguna manera sencilla de hacer desaparecer el error y hacer que mi programa imprima el XML tal como se lee?


Excelente publicación: http://www.carlosble.com/2010/12/understanding-python-and-unicode/

# -*- coding: utf-8 -*- def __if_number_get_string(number): converted_str = number if isinstance(number, int) or / isinstance(number, float): converted_str = str(number) return converted_str def get_unicode(strOrUnicode, encoding=''utf-8''): strOrUnicode = __if_number_get_string(strOrUnicode) if isinstance(strOrUnicode, unicode): return strOrUnicode return unicode(strOrUnicode, encoding, errors=''ignore'') def get_string(strOrUnicode, encoding=''utf-8''): strOrUnicode = __if_number_get_string(strOrUnicode) if isinstance(strOrUnicode, unicode): return strOrUnicode.encode(encoding) return strOrUnicode


Intente agregar la siguiente línea en la parte superior de su secuencia de comandos python.

# _*_ coding:utf-8 _*_


No codifique la codificación de caracteres de su entorno dentro de su script; imprime texto Unicode directamente en su lugar:

assert isinstance(text, unicode) # or str on Python 3 print(text)

Si su salida se redirige a un archivo (o una tubería); puede usar PYTHONIOENCODING envvar para especificar la codificación de caracteres:

$ PYTHONIOENCODING=utf-8 python your_script.py >output.utf8

De lo contrario, python your_script.py debería funcionar como está: la configuración de su configuración regional se usa para codificar el texto (en verificación POSIX: LC_ALL , LC_CTYPE , LANG envvars), establezca LANG en una configuración regional utf-8 si es necesario.

Para imprimir Unicode en Windows, consulte esta respuesta que muestra cómo imprimir Unicode en la consola de Windows, en un archivo o con IDLE .


Probablemente, tu problema es que lo analizaste bien, y ahora tratas de imprimir el contenido del XML y no puedes porque hay algunos caracteres Unicode extraños. Intenta codificar tu cadena Unicode primero como ascii:

unicodeData.encode(''ascii'', ''ignore'')

la parte ''ignorar'' le dirá que saltee esos caracteres. De los documentos de python:

>>> u = unichr(40960) + u''abcd'' + unichr(1972) >>> u.encode(''utf-8'') ''/xea/x80/x80abcd/xde/xb4'' >>> u.encode(''ascii'') Traceback (most recent call last): File "<stdin>", line 1, in ? UnicodeEncodeError: ''ascii'' codec can''t encode character ''/ua000'' in position 0: ordinal not in range(128) >>> u.encode(''ascii'', ''ignore'') ''abcd'' >>> u.encode(''ascii'', ''replace'') ''?abcd?'' >>> u.encode(''ascii'', ''xmlcharrefreplace'') ''&#40960;abcd&#1972;''

Es posible que desee leer este artículo: http://www.joelonsoftware.com/articles/Unicode.html , que me pareció muy útil como tutorial básico sobre lo que está sucediendo. Después de la lectura, dejarás de sentir que simplemente estás adivinando qué comandos usar (o al menos eso me pasó a mí).


Puedes usar algo de la forma

s.decode(''utf-8'')

que convertirá una cadena de bytes codificada en UTF-8 en una cadena de Unicode de Python. Pero el procedimiento exacto a usar depende exactamente de cómo cargar y analizar el archivo XML, por ejemplo, si nunca accedes directamente a la cadena XML, es posible que debas usar un objeto decodificador del módulo de codecs .


Si necesita imprimir una representación aproximada de la cadena en la pantalla, en lugar de ignorar esos caracteres no imprimibles, intente 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 u.encode(''ascii'', ''ignore'') para una cadena dada u , y puede salvarte de dolores de cabeza innecesarios si la precisión del carácter no es lo que buscas, pero aún deseas tener legibilidad humana.

Wirawan


Una mejor solución:

if type(value) == str: # Ignore errors even if the string is not proper UTF-8 or has # broken marker bytes. # Python built-in function unicode() can do this. value = unicode(value, "utf-8", errors="ignore") else: # Assume the value object has proper __unicode__() method value = unicode(value)

Si desea leer más acerca de por qué:

http://docs.plone.org/manage/troubleshooting/unicode.html#id1