【发布时间】:2018-01-20 22:22:46
【问题描述】:
我正在使用 BeautifulSoup 解析我使用 WGet 在本地下载的一堆网页。
我正在像这样读取文件:
file = open(file_name, 'r', encoding='utf-8').read()
soup = BeautifulSoup(file, 'html5lib')
我正在使用这个 soup 对象来获取文本,然后我将其写入 .json 文件,如下所示:
f.write('"text": "' + str(text.encode('utf-8')) )
但是,当我打开 .json 文件时,我会看到如下字符串:
and\xe2\x80\x94in spite of
He hadn\xe2\x80\x99t shaved in a few days at least
and Michael can go.\xe2\x80\x9d\xc2\xa0 Her voice
我知道这些奇怪的字符不是 UTF-8,所以 python 不知道如何处理它们。 但我不知道如何解决这个问题。
感谢您的帮助。
编辑:我正在使用 python3
此外,如果我在编写文本之前删除了对文本进行编码的部分,则会收到以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 264: ordinal not in range(128)
【问题讨论】:
-
您是否以 UTF-8 编码打开文件?
-
看起来你正在使用 Python 3。你应该总是在 Unicode 问题中提到 Python 版本,因为 Python 2 和 3 在这方面有很大的不同。但无论如何,像
\xe2\x80\x94这样的十六进制序列实际上是有效的 UTF-8 多字节序列。正确解码后,它们变为and—in spite ofHe hadn’t shaved in a few days at leastand Michael can go.” Her voice。我使用此代码执行该转换:s.encode('latin1').decode()。但我不知道 BeautifulSoup,所以我不能告诉你解决这个问题的正确方法。
标签: python json unicode beautifulsoup