Python.expat no puede archivo XML analizan con malas símbolos. Cómo dar la vuelta?
-
21-09-2019 - |
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 "?"?
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?