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调用C语言开发的共享库方法实例
Mar 18 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
使用Keras 实现查看model weights .h5 文件的内容
Jun 09 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
Python竟然能剪辑视频
May 25 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
PHP中的CMS的涵义
2007/03/11 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
JavaScript 的方法重载效果
2009/08/07 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python批量创建指定名称的文件夹
2019/03/21 Python
django将数组传递给前台模板的方法
2019/08/06 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
行政文秘岗位职责范本
2014/02/10 职场文书
校园元旦活动总结
2014/07/09 职场文书
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
如何通过一篇文章了解Python中的生成器
2022/04/02 Python