Python:将ascii转换为unicode的困难

Python:将ascii转换为unicode的困难,python,unicode,encoding,utf-8,Python,Unicode,Encoding,Utf 8,我的目标是:从url获取页面源,并统计该页面源中关键字的所有实例 我是如何做到的:通过urllib2获取页面源,循环页面源的每个字符,并将其与关键字进行比较 我的问题:我的关键字是用utf-8编码的,而页面源是用ascii编码的。。。每当我尝试转换时,都会遇到错误 获取页面源: import urllib2 response = urllib2.urlopen(myUrl) return response.read() 比较页面源和关键字: pageSource[i] == keyWord[j

我的目标是:从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)
并对您的
关键字
数据执行相同的操作。如果它被编码为UTF-8,则将其解码为UTF-8,或者使用Unicode字符串文字

您可能想了解Python和Unicode:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德

我假设您的远程“源页面”包含的不仅仅是ASCII,否则您的比较将按原样进行(ASCII现在是UTF-8的子集。即ASCII中的a是0x41,与UTF-8相同)

您可能会发现Python库更容易,因为它会根据服务器的头自动将远程内容解码为Unicode字符串(Unicode字符串是编码中立的,因此可以进行比较,而不必担心编码)

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

keyWord[j] = "€".decode("UTF-8")
keyWord[j]
>> u'€'
如果要在源代码中嵌入非ASCII码,则需要定义所使用的编码。例如,在源代码/脚本的顶部:

# coding=UTF-8

您是否尝试过使用解码('utf-8')和编码('utf-8')?您确定您的页面源是ASCII码吗?ASCII现在是UTF-8的子集。也就是说,ASCII中的A是
0x41
,这与UTF-8相同。此库比urllib好得多,感谢您的建议!对我来说,这个解决方案奏效了
# coding=UTF-8