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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
详解Django通用视图中的函数包装
Jul 21 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
对python3标准库httpclient的使用详解
Dec 18 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
python pandas生成时间列表
Jun 29 Python
PyTorch中的Variable变量详解
Jan 07 Python
python db类用法说明
Jul 07 Python
python函数指定默认值的实例讲解
Mar 29 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
领悟php接口中interface存在的意义
2013/06/27 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
php使用正则验证中文
2016/04/06 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Python 类的特殊成员解析
2018/06/20 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
公司保密承诺书
2014/03/27 职场文书
英文慰问信
2015/02/14 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书