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创建日历实例
Aug 21 Python
Python中的localtime()方法使用详解
May 22 Python
python提取页面内url列表的方法
May 25 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
python 3.7.0 安装配置方法图文教程
Aug 27 Python
python简单区块链模拟详解
Jul 03 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
python如何写try语句
Jul 14 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
python实现求纯色彩图像的边框
Apr 08 Python
python套接字socket通信
Apr 01 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
javascript中new关键字详解
2015/12/14 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
Python兔子毒药问题实例分析
2015/03/05 Python
Python多进程机制实例详解
2015/07/02 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
Python语言描述最大连续子序列和
2017/12/05 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
详解Python yaml模块
2020/09/23 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
python regex库实例用法总结
2021/01/03 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
捷克时尚网上商店:OTTO
2018/03/15 全球购物
中医药大学毕业生自荐信
2013/11/08 职场文书
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
2013的个人自我评价
2013/12/26 职场文书
学校采购员岗位职责
2014/01/02 职场文书
解除劳动合同协议书
2014/04/14 职场文书
主题实践活动总结
2014/05/08 职场文书
搞笑车尾标语
2014/06/23 职场文书
体育课外活动总结
2014/07/08 职场文书
项目工作说明书
2014/07/29 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript