用漂亮的汤处理 xml 的编码错误

Posted

技术标签:

【中文标题】用漂亮的汤处理 xml 的编码错误【英文标题】:handling encoding error with xml with beautiful soup 【发布时间】:2019-07-16 17:04:18 【问题描述】:

我的 xml 文件是这样编码的:

<?xml version="1.0" encoding="utf-8"?>

我正在尝试使用漂亮的汤来解析这个文件。

from bs4 import BeautifulSoup

fd = open("xmlsample.xml")  
soup = BeautifulSoup(fd,'lxml-xml',from_encoding='utf-8')

但这会导致

Traceback (most recent call last):
  File "C:\Users\gregg_000\Desktop\Python 
Experiments\NRE_XMLtoCSV\NRE_XMLtoCSV\bs1.py", line 4, in <module>
    soup = BeautifulSoup(fd,'lxml-xml', from_encoding='utf-8')
  File 
"C:\Users\gregg_000\AppData\Local\Programs\Python\Python36\lib\site- 

packages\bs4__init__.py",第 245 行,在 init 中 标记 = 标记.read() 文件

"C:\Users\gregg_000\AppData\Local\Programs\Python\Python36\lib\encodings\cp125 2.py",第 23 行,在解码中 返回 codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError:“charmap”编解码器无法解码位置的字节 0x9d 5343910:字符映射到未定义

我的感觉是 Python 想要使用默认的 cp1252 字符集。如何强制使用 utf-8 而不必求助于命令行? (我处于一个无法轻易强制对 python 设置进行全局更改的设置中)。

【问题讨论】:

您能否编辑问题以显示完整的错误消息? 【参考方案1】:

您还应该将编码添加到您的 open() 调用中(这是一个可接受的参数,如 the docs 所示)。默认情况下,在 Windows 中(至少在我的安装中),默认情况下,如您所料,cp1252。

from bs4 import BeautifulSoup

fd = open("xmlsample.xml", encoding='utf-8')
soup = BeautifulSoup(fd,'lxml-xml',from_encoding='utf-8')

【讨论】:

以上是关于用漂亮的汤处理 xml 的编码错误的主要内容,如果未能解决你的问题,请参考以下文章

试图用漂亮的汤从***上刮下一个季后赛支架。如何识别正确的列?

用漂亮的汤和熊猫刮桌子时如何保留链接

将 lxml 与美丽的汤一起使用

findall 正则表达式字符串使用啥漂亮的汤?

如何合并两个漂亮的汤标签?

使用漂亮的汤蟒进行刮痧