Python:将ascii转换为unicode的困难
我的目标是:从url获取页面源,并统计该页面源中关键字的所有实例 我是如何做到的:通过urllib2获取页面源,循环页面源的每个字符,并将其与关键字进行比较 我的问题:我的关键字是用utf-8编码的,而页面源是用ascii编码的。。。每当我尝试转换时,都会遇到错误 获取页面源: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
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