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中的下划线详解
Jun 24 Python
python操作mysql数据库
Mar 05 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
Python绘制热力图示例
Sep 27 Python
Python 寻找局部最高点的实现
Dec 05 Python
python带参数打包exe及调用方式
Dec 21 Python
如何利用Python识别图片中的文字
May 31 Python
一文详述 Python 中的 property 语法
Sep 01 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 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
基础的WordPress插件制作教程
2015/11/24 PHP
PHP解决中文乱码
2017/04/28 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
python实现上传下载文件功能
2020/11/19 Python
python中模块的__all__属性详解
2017/10/26 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python线性回归实战分析
2018/02/01 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
产品促销活动策划书
2014/01/15 职场文书
优秀民警事迹材料
2014/01/29 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
优秀员工自荐书
2015/03/06 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python