python2编码问题解决了吗_Python2 编码问题实用解决方法

将python2中汉字会出现乱码的事一次性说清楚。

为了让初学者,不再为python2中汉字出现乱码的事烦恼!

1、写的代码模块需要指定编码

如果代码没有指定coding,python就默认所有的字符为ASCII码,

ASCII码只支持256个字符,ASCII码不支持中文,所以就报错。

所以要在代码前写上#coding:utf-8或#coding:gbk

但通用写上#coding:utf-8

2、python2 内部所有编码统一为unicode

unicode可以处理世界上所有语言的字符。

utf-8为unicode的一种实现形式,所以需要在代码前写上#coding:utf-8

3、编码转换

牢记python2内部编码为unicode.

其它的编码decode()为unicode,再编码encode()为你指定的编码,就不会出现乱码。

4、网页采集时

代码指定#coding:utf-8

如果网页的编码为gbk

需要这样处理:

html = html.decode('gbk').encode('utf-8')

5、代码前也可以写#coding:gbk,但也要保证你的代码文件的保存格式为gbk.这个在windows下会出现这样的问题。

6、字典等key或值的汉字问题

这里在IDE的设置里面指定IDE的默认编码 encoding为utf-8

# -*- coding:utf-8 -*-

#Author:zzk

import sys

print sys.getdefaultencoding()

# ascii

s = "中文"

print s

# 中文

if isinstance(s, unicode):

# s=u"中文"

print s.encode('gb2312')

else:

# s="中文"

print s.decode('utf-8').encode('utf-8')

# 中文

dict1 ={1:'python学习',2:'需要阅读的资料12345'}

print dict1

# 这样输出的没有显示汉字,是显示汉字的其它编码

dict2 ={1:'python学习',2:'需要阅读的资料12345'}

for key in dict2:

print dict2[key]

# {1: 'python\xe5\xad\xa6\xe4\xb9\xa0', 2: '\xe9\x9c\x80\xe8\xa6\x81\xe9\x98\x85\xe8\xaf\xbb\xe7\x9a\x84\xe8\xb5\x84\xe6\x96\x9912345'}

# python学习

# 需要阅读的资料12345

可以看出,使用把字典的内容遍历一个个输出时,就没有问题

7、unicode的汉字编码写到文本文件中

需要根据文本文件的编码进行转换

可以encode('utf-8')或encode('gbk')

总结:凡是报错信息中出现的错误包含“ASCII”,就是没有指定汉字编码的问题。

自己的实践案例:

# -*- coding:utf-8 -*-

__author__ = 'ZHONGZHIKUN408'

import urllib2

import re

url ='http://www.youkuaiyun.com/'

req = urllib2.Request(url)

response = urllib2.urlopen(url)

content = response.read()

pattern1 = re.compile(r'

data = re.findall(pattern1,str(content).decode('utf-8').encode('utf-8'))

print data

#这里直接打印,还是出现问题,因为输出是一个字典加上元组

j = 1

for i in data:

title = i[0]

print "Title %d is %s" %(j,title)

url = i[1]

print "URL %d is %s" %(j,url)

j+=1

with open('retest.txt','a') as f:

f.writelines(title.decode('utf-8').encode('utf-8')+'\n')

#开始写入文本的时候,也是unicode编码的,加上decode().encode()后,才正常

# f.write('\n') #有方法实现写入的时候换行,如上

f.write(url)

f.write('\n')

输出结果:

[('\xe4\xbb\x8e\xe9\x9b\xb6\xe6\x89\x93\xe9\x80\xa0\xe6\x90\xba\xe7\xa8\x8b\xe6\x97\xa0\xe7\xba\xbf\xe6\x8c\x81\xe7\xbb\xad\xe4\xba\xa4\xe4\xbb\x98\xe5\xb9\xb3\xe5\x8f\xb0 MCD \xe5\xae\x9e\xe8\xb7\xb5', 'http://geek.youkuaiyun.com/news/detail/188103'), ('\xe6\x8e\xa2\xe8\xae\xa8\xe6\x95\xb0\xe6\x8d\xae\xe6\x97\xb6\xe4\xbb\xa3\xe6\x9e\x84\xe5\xbb\xba\xe9\xab\x98\xe5\x8f\xaf\xe7\x94\xa8\xe6\x95\xb0\xe6\x8d\xae\xe5\xba\x93\xe7\x9a\x84\xe6\x96\xb0\xe6\x8a\x80\xe6\x9c\xaf', 'http://geek.youkuaiyun.com/news/detail/187852')]

Title 1 is 从零打造携程无线持续交付平台 MCD 实践

URL 1 is http://geek.youkuaiyun.com/news/detail/188103

Title 2 is 探讨数据时代构建高可用数据库的新技术

URL 2 is http://geek.youkuaiyun.com/news/detail/187852

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值