python字符编码是什么_python 字符编码与转换

python 字符编码与转换

发布时间:2018-02-25 11:59:55编辑:admin阅读(1751)

unicode 中文英文默认统一 2个字节

ASCII 只有英文和特殊字符 每个占用1个字节 不能存中文

每个字节由8个比特(Bit)构成

假如一个英文文档是2M,转换为unicode 编码转换,就变成了4M

为了解决空间浪费的问题,在unicode的基础上,出现了一个扩展集,叫UTF-8

UTF-8编码是可变长编码。默认所有英文字母按照ASCII的形式去存储。

所有中文字符,统一是3个字节

英文和特殊字符,依然是1个字节

unicode是万国编码,任何国家都可以使用。每个国家,编码都不一样的。

比如一款游戏《大话西游》用的是gbk编码开发的。出口到欧美国家,是无法直接运行的。

怎么办呢?把gbk转换为unicode就可以解决这个问题了。

关于字符编码与转码

请参考详细文章:

需知:

1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

下面请看一张图

370808ab2dbec43519b007f87b3d44ff.png

将字符串转换为gbks = "您好"

print(s.encode("gbk"))

执行输出

b'\xc4\xfa\xba\xc3'

可以看到输出最前面有一个b 表示这是一个二进制类型,也称之为bytes类型

那么encode("gbk"),不光是转换了编码,还转换成了二进制数据

查看gbk和utf-8的区别import sys

#打印默认编码

print(sys.getdefaultencoding())

s = "您好"

s_gbk = s.encode("gbk")

#打印gbk

print(s_gbk)

#打印utf-8,encode()默认使用utf-8

print(s.encode())

执行输出

utf-8

b'\xc4\xfa\xba\xc3'

b'\xe6\x82\xa8\xe5\xa5\xbd'

将gbk转换为utf-8import sys

#打印默认编码

print(sys.getdefaultencoding())

s = "您好"

s_gbk = s.encode("gbk")

print(s_gbk)

print(s.encode())

gbk_to_utf8 = s_gbk.decode("gbk").encode("utf-8")

print("utf8",gbk_to_utf8)

执行输出

utf-8

b'\xc4\xfa\xba\xc3'

b'\xe6\x82\xa8\xe5\xa5\xbd'

utf8 b'\xe6\x82\xa8\xe5\xa5\xbd'

发现转换之后,和上面的utf-8,是一模一样的。

上面的大图显示

gbk转换为utf8,需要2步

1.首先通过编码【decode】转换为unicode编码

2.然后通过解码【encode】转换为utf-8的编码

总结:

不同编码之间的转换,必须要先转换为unicode编码。

先执行decode()方法,传一个参数,告诉它,我是什么编码。

最后执行encode()方法,传一个参数,将要转换的编码是什么。

以下代码表示,声明文件编码为# coding: gbk

在python 里面,默认声明的变量是utf-8# coding: gbk

import sys

#打印默认编码

print(sys.getdefaultencoding())

s = "您好"

s_gbk = s.encode("gbk")

print(s_gbk)

程序执行

utf-8

b'\xc4\xfa\xba\xc3'

如果想要转换的gbk,能够正常显示

需要执行4步print(s.encode("utf-8").decode("utf-8").encode("gbk").decode("gbk"))

这一段代码就可以正常输出中文

由于s变量,默认就是utf-8编码,不能直接使用decode()方法。

需要先执行encode("utf-8"),再执行decode("utf-8")

再执行encode("gbk"),输出

b'\xc4\xfa\xba\xc3'

由于它是一个bytes类型,需要转换为字符串,所以最后执行decode("gbk")

得到中文 您好

编码之间的转换,需要2个步骤。先decode(),再encode().

转换完成之后,数据是bytes类型的,比较恶心啊。

如果需要正常显示,得decode()一下,才能正常显示。

注意,这里是decode()是指bytes类型与string类型之间的相互转换。

关键字:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值