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入门指引
Apr 01 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
python实现K最近邻算法
Jan 29 Python
对python中的高效迭代器函数详解
Oct 18 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
Python下载的11种姿势(小结)
Nov 18 Python
Python3中的tuple函数知识点讲解
Jan 03 Python
Python循环之while无限迭代
Apr 30 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 Memcached应用实现代码
2010/02/08 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php里array_work用法实例分析
2015/07/13 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
js分页工具实例
2015/01/28 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
微信运维交互机器人的示例代码
2018/11/12 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python实现的爬虫功能代码
2017/06/24 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
请介绍一下WSDL的文档结构
2013/03/17 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
赡养老人协议书范本
2015/08/06 职场文书
初中军训感想
2015/08/07 职场文书
python 实现图片特效处理
2022/04/03 Python