Python 列表内字符编码问题,encode和decode
来源:互联网 发布:淘宝网怎么是电脑版 编辑:程序博客网 时间:2024/05/06 02:50
在学习python爬虫时遇到个小问题,记录一下:
列表内的元素用循环单个输出的话,是正常的中文显示,而用 append 方法添加到集合再直接输出集合的时候,显示的是下面的Unicode编码格式。
import urllib2import randomfrom bs4 import BeautifulSouphds=[{'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},\ {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},\ {'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0'},\ {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},\ {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},\ {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'},\ {'User-Agent':'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11'},\ {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}]url='https://www.douban.com/tag'tags=[]req=urllib2.Request(url,headers=hds[random.randint(0,len(hds)-1)])source_code=urllib2.urlopen(req).read()plain_text=str(source_code)soup=BeautifulSoup(plain_text)tag_lists=soup.find('ul',{'class':'topic-list'}).findAll('a')for tag_list in tag_lists: print tag_list.get_text() tags.append(tag_list.get_text())print tags
香港台湾北京上海日本韩国英国意大利清迈巴黎欧洲火车[u'\u9999\u6e2f', u'\u53f0\u6e7e', u'\u5317\u4eac', u'\u4e0a\u6d77', u'\u65e5\u672c', u'\u97e9\u56fd', u'\u82f1\u56fd', u'\u610f\u5927\u5229', u'\u6e05\u8fc8', u'\u5df4\u9ece', u'\u6b27\u6d32', u'\u706b\u8f66']
后来发现字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码
如:s='中文'
如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需 要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。
如果字符串是这样定义:s=u'中文'
则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。如果一个字符串已经是unicode了,再进行解码则将出错。
以上问题应该是python2的问题,在python3中默认编码格式有调整,解决编码问题
阅读全文
0 0
- Python 列表内字符编码问题,encode和decode
- Python中的字符编码问题encode/decode
- 字符编码和python使用encode,decode转换utf-8, gbk, gb2312的问题
- pyhton字符编码问题--decode和encode方法
- pyhton字符编码问题--decode和encode方法
- python之通过encode()和decode()介绍编码问题
- Python编码解码问题 encode decode
- python中的编码问题unicode, encode, decode
- python编码问题之\"encode\"&\"decode\"
- python 编码乱码问题(decode,encode)
- python 编码问题 decode or encode
- Python编码之encode和decode
- Python中的decode解码和encode编码
- python中文编码问题(decode('gbk').encode('utf-8')和decode('utf-8').encode('gbk')这对好基友)
- python中文的编码问题(使用decode('gbk').encode('utf-8')和decode('utf-8').encode('gbk'))
- 字符编码和python使用encode,decode转换utf-8, gbk, gb2312
- python中文字符编码decode,encode以及乱码解决总结
- python中文字符编码decode,encode以及乱码解决总结
- MFC中popup、child、overlapped对话框的区别
- caffe之SoftmaxWithLoss层 自定义实现
- name can no longer contain capital letters
- Javascript获取IFrame内容(兼容IE&FF)
- META http-equiv="refresh" 实现网页自动跳转
- Python 列表内字符编码问题,encode和decode
- Android自定义滚动式时间选择器(在他人基础上修改)
- 算法谜题71 标记方格1
- windows下搭建本地redis服务器
- Java File类的常用方法
- 优秀程序员思考、学习新技术的原则和方式
- 你知道用户复购背后的秘密吗?
- ${jdbc.driver}异常
- tomcat启动本地正常访问,别的机器访问失败