Python: 难以将 ascii 转换为 unicode

Python: difficulty converting ascii to unicode

我的目标:从 url 获取页面源并计算该页面源中关键字的所有实例

我是怎么做的:通过 urllib2 获取页面源,遍历页面源的每个字符并将其与关键字进行比较

我的问题:我的关键字是用 utf-8 编码的,而页面源代码是 ascii...每当我尝试转换时,我都会 运行 出错。

获取页面源:

import urllib2
response = urllib2.urlopen(myUrl)
return response.read()

比较页面源和关键字:

pageSource[i] == keyWord[j]

我需要将其中一个字符串转换为另一个的编码。直觉上我觉得 ascii(页面源)到 utf-8(关键词)是最好和最简单的,所以:

    pageSource = unicode(pageSource)
UnicodeDecodeError: 'ascii' codec can't decode byte __ in position __: ordinal not in range(128)

尝试处理文本时,不要将数据保留为字节字符串。尽早解码为 Unicode,尽可能晚地编码回字节。

解码您下载的网络数据:

import urllib2

response = urllib2.urlopen(myUrl)
# Latin-1 is the default for HTTP text/ responses, adjust as needed
codec = response.info().getparam('charset', 'latin1')
return response.read().decode(codec)

并对您的 keyWord 数据执行相同的操作。如果它被编码为 UTF-8,就这样解码,或者使用 Unicode 字符串文字。

您可能需要阅读 Python 和 Unicode:

我假设您的遥控器 "source page" 包含的不仅仅是 ASCII,否则您的比较将按原样工作(ASCII 现在是 UTF-8 的子集。即 ASCII 中的 A 是 0x41,这是与 UTF-8 相同)。

您可能会发现 Python Requests 库更容易,因为它会根据服务器的 headers 自动将远程内容解码为 Unicode 字符串(Unicode 字符串编码中性,因此无需进行比较担心编码)。

resp = requests.get("http://www.example.com/utf8page.html")
resp.text
>> u'My unicode data €'

然后您需要解码您的参考数据:

keyWord[j] = "€".decode("UTF-8")
keyWord[j]
>> u'€'

如果您要在源代码中嵌入 non-ASCII,则需要定义您使用的编码。例如,在您的来源顶部 code/script:

# coding=UTF-8