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中shutil模块的学习笔记教程
Apr 04 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python列表使用实现名字管理系统
Jan 30 Python
详解python中的time和datetime的常用方法
Jul 08 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
Python程序暂停的正常处理方法
Nov 07 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Python基于traceback模块获取异常信息
Jul 23 Python
python中pop()函数的语法与实例
Dec 01 Python
Python作用域和名称空间的详细介绍
Apr 13 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递归列出所有文件和目录的代码
2008/09/10 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
python程序需要编译吗
2020/06/19 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
初中同学聚会感言
2014/02/11 职场文书
低碳环保演讲稿
2014/08/28 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
患者身份识别制度
2015/08/06 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
导游词之南京中山陵
2019/11/27 职场文书