pythonascii转utf8_python编码乱码问题

电子常识

2602人已加入

描述

Python是一种面向对象的解释型计算机程序设计语言,由荷兰人发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL协议。Python语法简洁清晰,特色之一是强制用空白符作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

Python ascii 编码转化为utf-8编码

实现代码如下:

123456a = ‘abce’

# print type(a)

b = a.decode(“ascii”)

# print type(b)

c = a.decode(“ascii”).encode(“utf-8”)

# print type(c)

在python中进行编码转换都是通过unicode作为中间值实现的。所以要先decode成unicode字符,然后再使用encode转换成utf-8编码的str。可以把注释取消了,看下转换过程中的类型。

ASCII 是一种字符集,包括大小写的英文字母、数字、控制字符等,它用一个字节表示,范围是 0-127 Unicode分为UTF-8和UTF-16。

UTF-8变长度的,最多 6 个字节,小于 127 的字符用一个字节表示,与 ASCII 字符集的结果一样,ASCII 编码下的英语文本不需要修改就可以当作 UTF-8 编码进行处理。

  python

Python 从 2.2 开始支持 Unicode ,函数 decode( char_set )可以实现 其它编码到 Unicode 的转换,函数 encode( char_set )实现 Unicode 到其它编码方式的转换。

比如

[python] view plain copy(“你好”).decode( “GB2312”)

将得到

u‘\u4f60\u597d’,

即 “你”和“好“的 Unicode 码分别是 0x4f60 和 0x597d

再用

[python] view plain copy(u‘\u4f60\u597d’).encode(”UTF-8“)

将得到

‘\xe4\xbd\xa0\xe5\xa5\xbd’

它是 “你好”的UTF-8编码结果。

python中使用 unicode的关键:unicode是一个类,函数unicode(str,”utf8“)从utf8编码(当然也可以是别的编码)的字符串str生成 unicode类的对象,而函数unc.encode(”utf8“)将unicode类的对象unc转换为(编码为)utf8编码(当然也可以是别的编码)的字符串。于是,编写unicode相关程序,需要做的事情是 * 获取数据(字符串)时,用unicode(str, ”utf8“)生成unicode对象 * 在程序中仅使用unicode对象,对程序中出现的字符串常量都以u”字符串“的形式书写 * 输出时,可将unicode对象转换为任意编码输出,使用str.encode(”some_encoding“)

[python] view plain copy》》》 unicode(”你好“, ”utf8“)

u‘\u4f60\u597d’

》》》 x = _

》》》 type(x)

》》》 type(”你好“)

》》》 x.encode(”utf8“)

‘\xe4\xbd\xa0\xe5\xa5\xbd’

》》》 x.encode(”gbk“)

‘\xc4\xe3\xba\xc3’

》》》 x.encode(”gb2312“)

‘\xc4\xe3\xba\xc3’

》》》 print x

你好

》》》 print x.encode(”utf8“)

你好

》》》 print x.encode(”gbk“)

???

以上是测试结果(Ubuntu 6.06,locale为utf8),注意type(x)和type(”你好“)的区别。从编码上可以看出utf8编码与gbk不同。在utf8的 locale设置下,打印x按该环境变量编码(我猜我猜我猜猜猜),而打印x.encode(”gbk“)则是乱码。

python编码乱码问题ascii unicode utf-8

基础知识部分

首先需明白python2.7默认使用的是ascii,而现在python3.x默认使用的是unicode。下面内容基于python2.7。

一、文件编码

一般文件使用的是utf-8或者bgk编码进行存储。但是由于python2.7默认使用ascii,所以python2.7在运行py后缀文件时也是默认以ascii编码读取文件。如果文件中没有中文不会出现问题。但是如果有中文的话,由于中文编码超出了ascii编码范围,所以python2.7将会报错。

所以我们需要在文件头部添加:

#coding:utf-8

或者

#!/usr/bin/python

# -*- coding: utf-8 -*-1234

来告诉python2.7此文件要用utf-8编码来读取。

在文件中设置后我们可以使用 a = u‘哈’;python会自动使用utf-8来读取汉字,并将其转换为Unicode对象。1

二、字符串编码

python2.7和字符串相关的数据类型,分别是标准字符串(str)是单字节字符序列,Unicode字符串(unicode)是双字节字符序列。。

python的解码,编码是python自动进行的,如果我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。python2.7的函数str()和unicode()默认将对象转成ascii编码。

但是对于中文,ascii编码是无法表示的。因此我们需要用sys.setdefaultencoding(‘utf-8’)来设置string对象默认的编码。

import sys

reload(sys)

sys.setdefaultencoding(‘utf-8’) 123

那么字符串如何在str和unicode间进行转换呢?python提供了两个函数:

b = u‘哈’ //b为unicode对象

b.encode(‘utf-8’) //将b从unicode类型转为utf-8类型

b.decode(‘utf-8’) //将b从utf-8类型转换为Unicode类型123

三、window控制台输出

window控制台默认使用gbk编码。如果你设置了

# -*- coding: utf-8 -*-1

python直接按照utf-8输出到控制台。所以我们可以改变文件编码:

# -*- coding: gbk -*-1

或者使用unicode类型进行输出,会自动转换。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分