Python2.x中文乱码问题解决方法


Posted in Python onJune 02, 2015

Python中乱码问题是一个很头痛的问题。
在Python3中,对中文进行了全面的支持,但在Python2.x中需要进行相关的设置才能使用中文。否则会出现乱码

Python2.x中文乱码问题解决方法

【问题原因】

在Python2.x中主要是字符编码的问题,处理不好的话,会导致乱码。Python默认采取的ASCII编码,字母、标点和其他字符只使用一个字节来表示,但对于中文字符来说,一个字节满足不了需求。

>>> import sys  

>>> sys.getdefaultencoding()  

'ascii' 

为了能在计算机中表示所有的中文字符,中文编码采用两个字节表示。如果中文编码和ASCII混合使用的话,就会导致解码错误,从而才生乱码。而CMD下默认的编码方式为:GBK,所以就造成了上面的乱码!

Python2.x中文乱码问题解决方法

采用两个字节的中文编码标准有:GB2312、GBK、BIG5等。

【处理办法】

为了将各种不同的语言包含在统一的字符集中,满足国际间的信息交流,国际上制订了UNICODE字符集,包含了世界上所有语言字符,这些字符具有唯一的编码,通过使用UNICODE字符集可以满足跨语言的文字处理,避免乱码的产生。
i)  交互式命令中:一般不会出现乱码,无需做处理

Python2.x中文乱码问题解决方法

ii) py脚本文件中:跨字符集必须做设置,否则乱码。
首先在开头一句添加:

# coding = utf-8  

# 或  

# coding = UTF-8  

# 或  

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

其次需将文件保存为UTF-8的格式!

上面那一句仅仅是告诉Python编译器:脚本中包含了非ASCII字符,并未进行转换。
如果要将字符编码从默认的ASCII改为UTF-8,需要在保存的时候选择保存为UTF-8格式。

如果是用NODEPAD打开,【另存为】-->UTF-8即可

Python2.x中文乱码问题解决方法

如果是用IDLE打开,【Options】-> 【Configure IDLE】->【General】

Python2.x中文乱码问题解决方法

上面的设置,可以保证IDLE,运行F5,能正常输出中文。

【编码解码】

在开头添加了# -*- coding: utf-8 -*-并将文件保存为UTF-8格式,仍然不能保证能输出正常输出中文,
不同的编辑器,如VIM,IDLE,Eclipse使用的输出编码都是不一致的。
所以,在一个地方能正常输出中文,在另外一个地方就未必。所以还必须做编码解码设置!

encode:编码
decode:解码

必须保证编码、解码的对象是同一个。比如说UTF-8方式编码, 必须再用UTF-8进行解码即可。

所以最终解决办法,还必须先按原先的方式解码,再按控制台格式重新编码:比如CMD默认是GBK方式
则必须使用如下方式:

Python2.x中文乱码问题解决方法

正确输出结果:

Python2.x中文乱码问题解决方法

【其他说明】
1.在Python3中,对中文的支持非常全面,源文件默认保存为UTF-8的编码,这样一来,不但可以在源代码中使用中文,而且变量名也可以使用中文,比如说:

>>> 中国 = 'Chinese'  

>>> print(中国)  

Chinese 

2.在Python3中,不需要来回的编解码,并且字符串对象也没有decode和encode方法。
Python 相关文章推荐
python字符串连接的N种方式总结
Sep 17 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
Python实现识别图片内容的方法分析
Jul 11 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
如何在python中实现线性回归
Aug 10 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
python spilt()分隔字符串的实现示例
May 21 Python
python实现的守护进程(Daemon)用法实例
Jun 02 #Python
Python中使用ElementTree解析XML示例
Jun 02 #Python
Python文档生成工具pydoc使用介绍
Jun 02 #Python
自己使用总结Python程序代码片段
Jun 02 #Python
python执行子进程实现进程间通信的方法
Jun 02 #Python
Python多进程并发(multiprocessing)用法实例详解
Jun 02 #Python
使用pdb模块调试Python程序实例
Jun 02 #Python
You might like
php实现快速排序法函数代码
2012/08/27 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
浅析Vue中method与computed的区别
2018/03/06 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
python实现异步回调机制代码分享
2014/01/10 Python
python删除文件示例分享
2014/01/28 Python
介绍Python中几个常用的类方法
2015/04/08 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
java程序员面试交流
2012/11/29 面试题
测量工程专业求职信
2014/02/24 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
python编程实现清理微信重复缓存文件
2021/11/01 Python