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
我的目标:从 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