在 Python 中解析 XML 时出现编码问题

Posted

技术标签:

【中文标题】在 Python 中解析 XML 时出现编码问题【英文标题】:Problem with encoding while parsing XML in Python 【发布时间】:2021-12-15 08:19:01 【问题描述】:

我正在尝试使用 python 解析 XML 文档,但我遇到了 书面口音 的问题,UTF-8 编码应该足够了。我已经看到了很多关于它的问题,但他们没有解决我的问题,她是我的代码:

def procesarXMLTohtml(archivoXML):

    try:
        f = open("generatedHTML.html", "w")
        
        #Escribimos la cabecera del HTML y sus metadatos
        writeHead(f)

        f.write('<body>\n')
        f.write('\t<h1> Presentacion de mi arbol genealogico hasta mis bisabuelos. </h1>\n')

        try:
            with open(archivoXML, 'r', 1, 'utf-8') as xml_file:
                arbol = ET.parse(xml_file) #Parsea el fichero XML
        except IOError:
            print ('No se encuentra el archivo ', archivoXML)
            exit()
            
        except ET.ParseError:
            print("Error procesando en el archivo XML = ", archivoXML)
            exit()
        
        raiz = arbol.getroot()
        
        print("\nElemento raiz = ", raiz.tag)

        if raiz.text != None:
            print("Contenido = ", raiz.text.strip('\n')) #strip() elimina los '\n' del string
        else:
            print("Contenido = ", raiz.text)
            
        print("Atributos = ", raiz.attrib)

        # Recorrido de los elementos del árbol
        for hijo in raiz.findall('.//'): # Expresión Path
            if(hijo.tag == 'persona'):
                f.write('\t\t<p> Persona: ' + hijo.attrib['nombre'] + ' ' + hijo.attrib['apellido'] + '</p>\n')

            print("\nElemento = " , hijo.tag)
            if hijo.text != None:
                print("Contenido = ", hijo.text.strip('\n')) #strip() elimina los '\n' del string
            else:
                print("Contenido = ", hijo.text)    
            print("Atributos = ", hijo.attrib)

        f.write('</body>\n')
        f.write('</html>\n')

    finally:
        f.close()

忽略打印和其他许多事情,我认为问题出在那一行:

with open(archivoXML, 'r', 1, 'utf-8') as xml_file:
                arbol = ET.parse(xml_file) #Parsea el fichero XML

HTML 文件看起来像这样,书写的重音符号显示不正确:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8" />
    <meta name="keywords" content = "Arbol genealogico, Familia"/>
    <meta name="author" content = "Diego Glez. Su�rez"/>
    <title> Arbol Genealogico </title>
</head>

<body>
    <h1> Presentacion de mi arbol genealogico hasta mis bisabuelos. </h1>
        <p> Persona: Diego Gonz�lez Su�rez</p>
        <p> Persona: Mar�a �ngeles Su�rez Fern�ndez</p>
        <p> Persona: �ngeles Fern�ndez Prado</p>
        <p> Persona: Adela Prado Prado</p>
        <p> Persona: Belarmino Fern�ndez</p>
        <p> Persona: Jos� Ram�n Su�rez Mu�iz</p>
        <p> Persona: Mercedes Mu�iz Casero</p>
        <p> Persona: Felix Su�rez</p>
        <p> Persona: Juan Manuel Gonz�lez Garc�a</p>
        <p> Persona: Mar�a Teresa Garc�a Garc�a</p>
        <p> Persona: Oliva Garc�a Garc�a</p>
        <p> Persona: Jos� Garc�a Men�ndez</p>
        <p> Persona: Jos� Manuel Gonz�lez Fern�ndez</p>
        <p> Persona: Visitaci�n Fern�ndez Fern�ndez</p>
        <p> Persona: Manuel Gonz�lez</p>
</body>
</html>

【问题讨论】:

【参考方案1】:

解决了: 当我创建输出文件时,需要指定编码。

f = open('generatedHTML.html', 'w', 1, 'UTF-8')

【讨论】:

以上是关于在 Python 中解析 XML 时出现编码问题的主要内容,如果未能解决你的问题,请参考以下文章

Python Unicode 编码错误

为啥在android应用程序中解析xml时出现nullpointerexception?

重新加载 UITableview 时出现问题..!

在 Android Studio 中使用 AsyncTask 解析在线 XML 文件时出现 NetworkOnMainThreadException

为啥在 MS SQL Server 中批量插入时出现“XML 解析:第 2 行,字符 0,文档语法不正确”

在MATLAB中将XML内容解析为正确的数据类型时出现问题