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 相关文章推荐
pydev使用wxpython找不到路径的解决方法
Feb 10 Python
跟老齐学Python之通过Python连接数据库
Oct 28 Python
python使用BeautifulSoup分析网页信息的方法
Apr 04 Python
C#返回当前系统所有可用驱动器符号的方法
Apr 18 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
python画图把时间作为横坐标的方法
Jul 07 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
基于python实现坦克大战游戏
Oct 27 Python
Python中使用Lambda函数的5种用法
Apr 01 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
Python实现拼音转换
Jun 07 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各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
ptyhon实现sitemap生成示例
2014/03/30 Python
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python2与Python3的区别点整理
2019/12/12 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
python字典的值可以修改吗
2020/06/29 Python
python实现扫雷游戏的示例
2020/10/20 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
公司营业员的工作总结自我评价
2013/10/05 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书