Maison  >  Article  >  développement back-end  >  Comment convertir l'encodage des fichiers XML en Python

Comment convertir l'encodage des fichiers XML en Python

王林
王林avant
2023-05-21 12:22:062189parcourir

1. Problèmes d'encodage des fichiers XML dans Python

1. La bibliothèque xml.etree.ElementTree utilisée par Python prend uniquement en charge l'analyse et la génération d'encodage au format UTF-8 standardxml.etree.ElementTree库只支持解析和生成标准的UTF-8格式的编码

2.常见GBKGB2312等中文编码的 XML 文件,用以在老旧系统中保证 XML 对中文字符的记录能力

3.XML 文件开头有标识头,标识头指定了程序处理 XML 时应该使用的编码

Comment convertir lencodage des fichiers XML en Python

4.要修改编码,不仅要修改文件整体的编码,还要将标识头中 encoding 部分的值修改

2. 处理 Python XML 文件的思路

1.读取&解码:

  • 使用二进制模式读取 XML 文件,将文件变为二进制流

  • 将二进制流使用.encode()方法,使用原文件的编码格式进行解析为字符串

2.处理标识头:使用.replace()方法,替换字符串中的encoding="xxx"

2. GBK ou GB2312 et d'autres fichiers XML codés en chinois sont utilisés pour garantir la capacité de XML à enregistrer des caractères chinois dans les anciens systèmes

3. Il y a un en-tête au début du XML. L'en-tête spécifie l'encodage que le programme doit utiliser lors du traitement de XML

Comment. pour analyser XML en Python Convertir l'encodage du fichier
  • 4. Pour modifier l'encodage, non seulement l'encodage de l'ensemble du fichier doit être modifié, mais aussi la valeur de la partie encodage dans l'en-tête doit être modifiée

    2. Idées pour traiter les fichiers XML Python
  • 1. Lire Récupérer et décoder :

    • Utilisez le mode binaire pour lire le fichier XML et transformer le fichier en flux binaire
    • Utilisez le flux binaire pour utiliser le .encode() et utilisez le format d'encodage du fichier d'origine. Analysez en une chaîne
    • 2. Traitez l'en-tête d'identification : utilisez la méthode .replace(). pour remplacer la partie encoding="xxx" dans la chaîne
    • 3. Encodage et sauvegarde : Enregistrez la chaîne en utilisant le nouveau format d'encodage

    • 3. Problèmes rencontrés dans le processus réel
  • GB2312. UTF : Pas de problème, vous pouvez le gérer directement selon la logique ci-dessus

GBK
  • Le principe ici est : l'encodage GBK est compatible avec l'encodage UTF-8, donc le contenu qui ne peut pas être converti peut être affiché directement à l'aide de GBK

  • GBK < ;–> : pas de problème

🎜4. 🎜
# filepath -- 原文件路径
# savefilepath -- 转换后文件存储路径(默认 = 原文件路径)
# oldencoding -- 原文件的编码格式
# newencoding -- 转换后文件的编码格式
def convert_xml_encoding(filepath, savefilepath=filepath, oldencoding, newencoding):
    # Read the XML file
    with open(filepath, &#39;rb&#39;) as file:
        content = file.read()

    # Decode the content from old encoding
    # 出现错误时忽略 errors=&#39;ignore&#39;
    decoded_content = content.decode(oldencoding, errors=&#39;ignore&#39;)
    # decoded_content = content.decode(&#39;GBK&#39;)


    # Update the encoding in the XML header
    updated_content = decoded_content.replace(&#39;encoding="{}"&#39;.format(oldencoding),
                                               &#39;encoding="{}"&#39;.format(newencoding))

    # Encode the content to new encoding
    # 出现错误时忽略 errors=&#39;ignore&#39;
    encoded_content = updated_content.encode(newencoding,errors=&#39;ignore&#39;)

    # Write the updated content to the file
    with open(savefilepath, &#39;wb&#39;) as file:
        file.write(encoded_content)

    # Result output
    print(f"XML file &#39;{os.path.basename(filepath)}&#39;({oldencoding}) --> &#39;{os.path.basename(savefilepath)}&#39;({newencoding})")

# ---------------------- 使用示例 ---------------------
# GBK --> utf-8
convert_xml_encoding(filepath, savefilepath2, &#39;GBK&#39;, &#39;utf-8&#39;)
# utf-8 --> gb2312
convert_xml_encoding(filepath, savefilepath2, &#39;utf-8&#39;, &#39;gb2312&#39;)
# GBK --> gb2312
convert_xml_encoding(filepath, savefilepath2, &#39;GBK&#39;, &#39;gb2312&#39;)
🎜Remarques :🎜🎜🎜🎜Étant donné que l'en-tête du logo doit être remplacé directement ici, le nom d'encodage doit correspondre complètement, sinon le remplacement échouera🎜 🎜🎜🎜Par exemple : GBK ne peut pas être écrit comme gbk, utf-8 ne peut pas être écrit en UTF8. Ce code est uniquement testé sur la base des formats GBK, GB2312, UTF-8 ci-dessus et du chinois et de l'anglais couramment utilisés. Il n'est pas garanti que la conversion soit réussie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer