You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

lxml.etree.ElementTree变音符号乱码:指定编码为何不生效?

Python 3.6 实现JSON转可浏览器预览的XML格式

嘿,我来给你梳理下用Python 3.6把UTF-8编码的标准JSON响应转换成能在Firefox、Chrome、IE或Edge里正常查看的XML格式的实现思路,全程只用lxml的两个模块搞定,不用额外工具:

核心工具选择

  • 用lxml.builder来快速给JSON数据套上XML标签,它的语法简洁,很适合构建嵌套的XML结构;
  • 用lxml.etree.ElementTree的write方法生成XML文件,这个方法能帮我们处理好编码和浏览器兼容性问题。

关键实现要点

  1. 编码一致性:因为JSON是标准UTF-8编码,生成XML时必须指定encoding='UTF-8',还要开启xml_declaration=True,这样浏览器能正确识别编码,避免乱码;
  2. XML结构可读性:开启pretty_print=True,生成的XML会自动换行缩进,在浏览器里查看时结构更清晰;
  3. 特殊字符处理:lxml会自动转义JSON里的特殊字符(比如&、<、>),不用担心破坏XML的合法性。

示例测试代码

from lxml import etree
from lxml.builder import E
import json

# 模拟UTF-8编码的JSON响应数据
json_response = '''
{
  "response": {
    "status": "success",
    "data": {
      "id": 123,
      "content": "Hello & World!",
      "tags": ["python", "xml", "json"]
    }
  }
}
'''

# 解析JSON为Python数据结构
parsed_data = json.loads(json_response)

# 构建XML节点
root = E('api_response')
status = E('status', parsed_data['response']['status'])
data_node = E('data')
data_node.append(E('id', str(parsed_data['response']['data']['id'])))
data_node.append(E('content', parsed_data['response']['data']['content']))
tags = E('tags')
for tag in parsed_data['response']['data']['tags']:
    tags.append(E('tag', tag))
data_node.append(tags)

# 组装XML树
root.append(status)
root.append(data_node)

# 生成可浏览器查看的XML文件
tree = etree.ElementTree(root)
tree.write(
    'result.xml',
    encoding='UTF-8',
    xml_declaration=True,
    pretty_print=True
)

浏览器查看注意事项

生成的XML文件直接用浏览器打开就能看到格式化后的结构啦,要是遇到显示异常,先检查XML文件开头的声明是否正确——应该有<?xml version='1.0' encoding='UTF-8'?>这一行,这是浏览器正确解析的关键。

内容的提问来源于stack exchange,提问作者RolfBly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:13:21