如何处理UTF-8编码的字符串和BeautifulSoup?

1 投票
3 回答
915 浏览
提问于 2025-04-16 06:17

我该如何把Unicode字符串中的HTML实体替换成正确的Unicode呢?

u'"HAUS Kleider" - Über das Bekleiden und Entkleiden, das VerhŸllen und Veredeln'

变成

u'"HAUS-Kleider" - Über das Bekleiden und Entkleiden, das Verhüllen und Veredeln'

补充说明
其实这些实体是错的。看起来是BeautifulSoup搞错了。

所以问题是:如何处理UTF-8编码的字符串和BeautifulSoup?

from BeautifulSoup import BeautifulSoup

f = open('path_to_file','r')
lines = [i for i in f.readlines()]
soup = BeautifulSoup(''.join(lines))
allArticles = []
for row in rows:
    l =[]
    for r in row.findAll('td'):
            l += [r.string] # here things seem to go wrong
    allArticles+=[l]

Ü -> Ÿ 应该是 Ü,但实际上我并不想改变编码。

>>> soup.originalEncoding
'utf-8'

但是我无法生成一个正确的Unicode字符串。

3 个回答

1

htmlentitydefs.entitydefs["quot"] 返回的是 '"'
这其实是一个字典,它的作用是把一些特殊的符号(实体)转换成它们真正的字符。
你可以在这个基础上继续进行其他操作。

1

我觉得你需要的是ICU 转换工具。我认为有一种方法可以把HTML实体转换成Unicode。

你可以试试这个叫做转换器IDHex/XML-Any,它应该能满足你的需求。在演示页面上,你可以选择“插入示例:复合”,然后在“复合 1”框里输入Hex/XML-Any,再在下面的输入框里加一些数据,最后点击“转换”。这样做有帮助吗?

还有一个Python的ICU绑定,但我觉得它的维护不是很好。

0

好吧,这个问题其实很简单,我得承认。我在交互式解释器中使用的是一个旧版本的 rows。我不知道里面有什么问题,但这是正确的代码:

from BeautifulSoup import BeautifulSoup

f = open('path_to_file','r')
lines = [i for i in f.readlines()]
soup = BeautifulSoup(''.join(lines))
rows = soup.findAll('tr')
allArticles = []
for row in rows:
    l =[]
    for r in row.findAll('td'):
        l += [r.string]
    allArticles+=[l]

真是丢脸啊!

撰写回答