我用pycharm写了一个urllib2打开网页:
coding=gbk
import urllib2
url = 'http://www.douban.com/'
request = urllib2.Request(url)
response = urllib2.urlopen(request)
print response.read().decode('utf-8')
print "北京"
发现print “北京”能够正确显示中文字符,但是网页内容却是中文乱码,如下
br><img src="https://img3.doubanio.com/pics/icon/jubao.png" align="absmiddle" width="15px"> 涓浗浜掕仈缃戜妇鎶ヤ腑蹇� 鐢佃瘽锛�12377
北京
不知道哪位大神能告诉我怎么设置才能正确显示中文字符?(win7系统默认GBK,python2.7.11,pycharm4.5)
或者你可以保存文件到txt,其实现实是正确的。
问题是print函数。
ubuntu的pycharm中文注释显示乱码
先告诉你一个原则,在代码中,尽量保持是unicode
的编码,出来包括输出,或者保存到文件尽量不要是unicode
的编码,所以,你的print response.read().decode('utf-8')
就是把源码以unicode形式输出了,这样是不行的,需要是utf-8
或者gbk
, 因此你的.decode('utf-8')
是多余的.只需要:
print response.read()
另外开头的
# coding:utf-8
#coding:gbk
这个只是关于代码的编码,比如说,你代码中有中文注释,如果不加开头的东西的话,会报错的。跟你输出没有任何关系。因此没有必要纠结开头的那个编码。
另外需要注意的是:
print response.read()
它的输出就是网页的编码输出的, 如果网页是gbk
输出就是gbk
,反过来如果是utf-8
就是utf-8
.因此想输出中文的话,还要考虑你的终端,比如windows
下的cmd
识别gbk
编码。如果网页的编码是utf-8
的话,输出也会是乱码,需要转换一下
print response.read().decode('utf-8').encode('gbk') #decode('utf-8')把utf-8解码为decode,encode('gbk')将unicode编码为gbk.
所以编码这块思路很清晰:进去unicode, 出来不是unicode.
两个步骤:
1、设置PyCharm工具的编码格式:File--》setting--》Editor--》File Encodings--》IDE encoding:utf-8
2、在File--》Setting--》File and Code Templates模块里加入下面语句:
文件首行添加:#-*- encoding:utf-8 -*-
__author__ = '$USER'
如果源文件里有中文,请使用 UTF-8
编码保存文件,并在文件头部声明:# coding: utf8
。
豆瓣的页面使用的是
UTF-8
编码,所以response.read()
得到的是UTF-8
编码的数据。你需要使用decode('utf-8')
把str
转换为unicode
。想在 Windows 显示,那么还需要转成 GBK 编码才可以,所以在1的基础上,
encode('gbk')
再输出应该就正确了。