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的ORM框架SQLObject入门实例
Apr 28 Python
Python实现队列的方法
May 26 Python
tensorflow实现简单的卷积网络
May 24 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
python+mysql实现教务管理系统
Feb 20 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
python 求定积分和不定积分示例
Nov 20 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
Aug 31 Python
python输出国际象棋棋盘的实例分享
Nov 26 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 Class&Object -- 解析PHP实现二叉树
2013/06/25 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
koa-router源码学习小结
2018/09/07 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
实例讲解React 组件生命周期
2020/07/08 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
python求素数示例分享
2014/02/16 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
Django的models模型的具体使用
2019/07/15 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
毕业证丢失证明
2014/01/15 职场文书
我为自己代言广告词
2014/03/18 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang