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中的is和id用法分析
Jan 26 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Python中的Django基本命令实例详解
Jul 15 Python
python采集微信公众号文章
Dec 20 Python
Django 创建新App及其常用命令的实现方法
Aug 04 Python
如何获取Python简单for循环索引
Nov 21 Python
Python使用sqlite3模块内置数据库
May 07 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
python Selenium 库的使用技巧
Oct 16 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扩展介绍与开发教程
2010/08/19 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
PHP SOCKET编程详解
2015/05/22 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
javascript判断office版本示例
2014/04/11 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
Python导入模块时遇到的错误分析
2017/08/30 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python3实现绘制二维点图
2019/12/04 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
利用python在excel中画图的实现方法
2020/03/17 Python
python轮询机制控制led实例
2020/05/03 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
Weblogic和WebSphere不同特点
2012/05/09 面试题
文明村镇申报材料
2014/05/06 职场文书
电子商务专业求职信
2014/07/10 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
七年级作文之下雨天
2019/12/23 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS