Python2.x中文乱码问题

Python中乱码问题是一个很头痛的问题。

在Python3中,对中文进行了全面的支持,但在Python2.x中需要进行相关的设置才能使用中文。否则会出现乱码

问题原因

在Python2.x中主要是字符编码的问题,处理不好的话,会导致乱码。Python默认采取的ASCII编码,字母、标点和其他字符只使用一个字节来表示,但对于中文字符来说,一个字节满足不了需求。

>>> import sys
>>> sys.getdefaultencoding()
'ascii'

为了能在计算机中表示所有的中文字符,中文编码采用两个字节表示。如果中文编码和ASCII混合使用的话,就会导致解码错误,从而才生乱码。而CMD下默认的编码方式为:GBK,所以就造成了上面的乱码!

采用两个字节的中文编码标准有:GB2312、GBK、BIG5等。

处理办法

为了将各种不同的语言包含在统一的字符集中,满足国际间的信息交流,国际上制订了UNICODE字符集,包含了世界上所有语言字符,这些字符具有唯一的编码,通过使用UNICODE字符集可以满足跨语言的文字处理,避免乱码的产生。

i)  交互式命令中:一般不会出现乱码,无需做处理

ii) py脚本文件中:跨字符集必须做设置,否则乱码。

  • 首先在开头一句添加:
# coding = utf-8
# 或
# coding = UTF-8
# 或
# -*- coding: utf-8 -*-
  • 其次需将文件保存为UTF-8的格式!

上面那一句仅仅是告诉Python编译器:脚本中包含了非ASCII字符,并未进行转换。

如果要将字符编码从默认的ASCII改为UTF-8,需要在保存的时候选择保存为UTF-8格式。

如果是用NODEPAD打开,【另存为】-->UTF-8即可

如果是用IDLE打开,【Options】-> 【Configure IDLE】->【General】

上面的设置,可以保证IDLE,运行F5,能正常输出中文。

编码解码

在开头添加了# -*- coding: utf-8 -*-并将文件保存为UTF-8格式,仍然不能保证能输出正常输出中文,

不同的编辑器,如VIM,IDLE,Eclipse使用的输出编码都是不一致的。

所以,在一个地方能正常输出中文,在另外一个地方就未必。所以还必须做编码解码设置!

encode:编码

decode:解码

必须保证编码、解码的对象是同一个。比如说UTF-8方式编码, 必须再用UTF-8进行解码即可。

所以最终解决办法,还必须先按原先的方式解码,再按控制台格式重新编码:比如CMD默认是GBK方式

则必须使用如下方式:

正确输出结果:

其他说明

1.在Python3中,对中文的支持非常全面,源文件默认保存为UTF-8的编码,这样一来,不但可以在源代码中使用中文,而且变量名也可以使用中文,比如说:

>>> 中国 = 'Chinese'
>>> print(中国)
Chinese

2.在Python3中,不需要来回的编解码,并且字符串对象也没有decode和encode方法。

时间: 2024-10-07 15:53:44

Python2.x中文乱码问题的相关文章

Eclipse+pydev2.2+python2.7 中文乱码问题

Eclipse+pydev2.2+python2.7 中文乱码问题 Eclipse的设置 window->preferences->general->editors->text editors->spelling->encoding->UTF-8 window->preferences->workspace->text file encoding->UTF-8 打开eclipse安装目录->eclipse.ini,末行加上”-Dfil

python2输出中文乱码问题

python2输出中文乱码问题 1.在源码文件第一行添加 #-*-coding:utf-8-*- 或  #encoding=utf-8 或  #encoding=UTF-8 注意:一定要在第一行! 2.在字符串前加 ' u ' 例: spring=u"这是一个测试字符串" 3.若上述2种方式仍然不能保证能输出正常输出中文,就需要做编码解码设置 即 encode: 编码(真实字符与二进制串的对应关系,真实字符→二进制串) decode: 解码(二进制串与真实字符的对应关系,二进制串→真实

pyqt4 python2.7 中文乱码的解决方法

import sysimport localefrom PyQt4.QtGui import *from PyQt4.QtCore import *from untitled import Ui_Dialog if __name__=="__main__": app = QApplication(sys.argv) mycode = locale.getpreferredencoding() code = QTextCodec.codecForName(mycode) QTextCod

彻底解决matplotlib中文乱码问题(转)

彻底解决matplotlib中文乱码问题 1.环境查看a.系统版本查看[[email protected] ~]$ cat /etc/redhat-releaseCentOS Linux release 7.2.1511 (Core) b.系统中文字体查看 [[email protected] ~]$ fc-list :lang=zh/usr/share/fonts/wqy-microhei/wqy-microhei.ttc: 文泉驿等宽微米黑,文泉驛等寬微米黑,WenQuanYi Micro

python查询mysql中文乱码问题

python2.7 查询或者插入中文数据在mysql中的时候出现中文乱码 --- 可能情况: 1.mysql数据库各项没有设置编码,默认为'latin' 2.使用MySQL.connect的时候没有设置默认编码 3.没有设置python的编码,python2.7默认为'ascii' 4.没有解码 --- 解决方法: 1.设置mysql的编码 ubuntu执行下列语句:** sudo vim /etc/mysql/my.cnf **然后在里面插入语句: [client]default-charac

djangoweb应用_mysql_cmd中文乱码问题

目前使用django.mysql进行学习,应用为<简易投票>网站,在学习过程中,遇到了中文乱码问题,现记录如下: 系统情况:win8 , mysql5.5, python2.7, django1.11 最开始按照教程进行mysql数据库的配置,在character选项中,选择为第二项,也就是utf8编码.配置完成后,在CMD中链接数据库服务器后,操作show variables like '%character%'显示编码正确-几乎全为utf8.确定以上信息后,在浏览器中访问web应用,能正常

centos6.7下安装mysql5.6.22同时解决中文乱码问题

1.下载 http://dev.mysql.com/downloads/mysql/ 或者使用wget下载: wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-5.6.22-1.el6.i686.rpm-bundle.tar 2.安装 2.1.  检测是否已经安装了mysql rpm -qa | grep mysql 如果已经安装了,将其卸载,如: rpm -e --nodeps  mysql-libs-5.1.71-1.el6.x8

XShell连接CentOS 7.2显示中文乱码问题的解决方法

背景 使用U盘往Windows主机.Linux主机传文件还是经常的事,但有时候文件名有中文, 传到Linux机器会有乱码,选择起来也很麻烦,最近刚好遇到,写下解决方法. 环境 Linux [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected]-base ~]# echo $LANG en_US.UTF-8 [[email protected]-ba

[oracle]解决centos 7下oracle的中文乱码问题

首先在形成中文乱码的原因是由于字符集不统一导致的,不同的字符集在转换的过程中必然要出现乱码,当然不排除可以转换.所以要解决中文乱码问题,思路是将输入.存储.显示等流程中涉及到字符集都统一为一种,对于oracle首先必须满足的先决条件是要服务端和客户段的字符集统一,若还不能解决问题,同时还要将系统的字符集与之统一,甚至导入或输入数据所使用的字符集统一. 看了网上的一些资料后,都说修改服务器的字符集风险比较大,确实,测试开发用还好说,假若是上线项目的服务器,那修改服务器字符集所带来的后果是不堪的,废