繁体   English   中英

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

[英]Problem with encoding while parsing XML in Python

我正在尝试使用 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>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM