Pregunta

Estoy tratando de analizar un archivo XML (datos OSM) con expatriados, y hay algunas líneas con caracteres Unicode que no se puede analizar de expatriados:

<tag k="name"
v="абвгдежзиклмнопр�?туфхцчшщьыъ�?ю�?�?БВГДЕЖЗИКЛМ�?ОПРСТУФХЦЧШЩЬЫЪЭЮЯ" />

<tag k="name" v="Cin\x8e? Rex" />

(archivo XML codificación en la línea de apertura es "UTF-8")

El archivo es bastante antiguo, y no debe haber sido errores. En los archivos modernos no veo errores UTF-8, y son bien analizada. Pero lo que si mi programa cumple un símbolo rota, lo que solución puedo hacer? ¿Es posible unirse a bz2 códec (I analizar un archivo comprimido) y UTF-8 códec de hacer caso omiso de los personajes rotas, o cambiarlos a "?"?

¿Fue útil?

Solución

No estoy seguro si '' personajes fueron introducidos por cadena de copiar y pegar aquí, pero si usted los tiene en los datos originales, entonces parece ser generador problema que se presentó charactes \ uFFFD como:

"usado para reemplazar un carácter de entrada cuyo valor es desconocido o no representable en Unicode "

-CITIED de: http://www.fileformat.info/info/unicode/char/ FFFD / index.htm

Solución? idea justa de la extensión:

good = True
buf = None
while True:
if good:
        buf = f.read(buf_size)
        else:
        # try again with cleaned buffer
        pass
        try:
            xp.Parse(buf, len(buf) == 0)
            if (len(buf) == 0):
                    break
        good = True
    except ExpatError:
        if xp.ErrorCode  == XML_ERROR_BAD_CHAR_REF:
            # look at ErrorByteIndex (or nearby)
            # for 0xEF 0xBF 0xBD (UTF8 replacement char) and remove it
            good = False
        else:
            # other errors processing
            pass

O de entrada limpia tampón en lugar + casos de esquina (secuencia parcial en el extremo buffer). No puedo recordar si expat de pitón permite al controlador de error personalizada Asignar. Eso sería más fácil entonces.

Si el suyo i limpias muestra de '' caracteres se procesa bien. \ Xd1 no falla.

Los datos de OSM?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top