python-3.x - 删除 XML 文件开头的 BOM 标记
问题描述
我有一个 XML 文件,我试图从中删除一个 BOM,因为我需要使用 lxml 解析它。可以在此处找到该文件的链接。一些简化的代码是:
from lxml import etree
f = open(filename, "r")
ff = f.read()
fff = ff.encode('utf-8-sig')
ffff = fff.decode('utf-8')
tree = etree.fromstring(ffff)
我尝试按照此处的一些示例来处理此类实例,但是我仍然遇到与开始时相同的错误:
lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1
我做错了什么?
谢谢
解决方案
您当前的代码正在向后进行编码和解码,最终以双倍的 BOM 而不是根本没有。您想使用常规编码utf-8
,并使用解码utf-8-sig
。
但是您可以通过直接从文件中进行解码来避免所有这些。尝试:
f = open(filename, "r", encoding="utf-8-sig")
ff = f.read()
tree = etree.fromstring(ff)
推荐阅读
- webpack - webpack CSS-loader 应该只加载特定文件夹中的文件
- c++ - “class classname* funcname(void)”在 C++ 中是什么意思?
- go - golang gin如何获取GET请求查询字符串的数组参数?
- r - 使用 POSIXct 和夏令时绘制条形图
- javascript - 当幻灯片总数和显示的幻灯片总数相等且滑块也不滑动时,滑动滑块箭头隐藏
- asp.net-mvc - (路由问题)在 IIS 上托管 .NET Core 5.0 MVC 应用程序
- material-ui - MaterialUi 不使用 React
- node.js - Socket.io 客户端关闭,原因是 ping 超时
- python - 如何检查一个目录是否有python中的音乐文件?
- powershell - PowerScript:System.Windows.Forms.FolderBrowserDialog 在后台打开