python中将字符转换为编码值(Python字符编码转换)(1)

关于字符的编码,这是一个及其重要的知识点,这个点不搞清楚,那改bug有时候你会晕的。我们下面就以Python为例来说说字符编码的问题。

我们常见的编码格式有ASCII、gbk、GB2312、UTF-8、GB18030和Unicode等等。

说明一下:

那问题来了,在我们中国,怎么表示中文呢?于是就有了下面的三种编码。

那问题继续来了,那每个国家都有自己的一套编码,那不是买了他国的设备,显示不出本国的字符了?

于是乎,就有了ISO标准的万国码-------Unicode。

要说这个Unicode好啊 ,都能存储了,可是问题又来了,我本身英文的字符我是用ASCII编码,只占用8bit,现在用你的Unicode要占用16bit。这不是扯了蛋了。使用英文字符的就不愿意了,要知道内存还是很贵的。这就出现了UTF-8。

有了这么多种编码,那么编码的转换就是一个很必然的问题了。

字符编码与转换

看一个很重要的图:

我们举个例子,假如现在要把韩国的一个软件运行在我们的机器上,假如这个软件使用的是x编码,我们知道不经过处理肯定是跑不起来的,这就需要一个转码的过程,这个过程是:x编码------>Unicode------>GBK。必须要有这个过程。x编码------>Unicode 这个过程一般称为解码(decode),Unicode------>GBK这个过程称为编码(encode)。反之,我们也需要这样一个过程。总之,转码的过程Unicode成了一个桥梁,转化成Unicode的过程一般称为decode。

在我们的python3中所有的编码都为utf-8。在python2中为ASCII。可使用该指令查询:

python中将字符转换为编码值(Python字符编码转换)(2)

我们以python3x为例来说明一下:

python中将字符转换为编码值(Python字符编码转换)(3)

这是我的pycharm的界面,注意右下角的编码格式为:UTF-8,这个表示我的这个程序使用的是UTF-8编码。

而在左侧输出栏里面的UTF-8表示的python3使用的默认编码是UTF-8。

python中将字符转换为编码值(Python字符编码转换)(4)

我们把pycharm右下角的编码格式改为GBK。

python中将字符转换为编码值(Python字符编码转换)(5)

写个简单的字符串,同志们报错了啊。这是为啥呢?我们先改一下再看:

python中将字符转换为编码值(Python字符编码转换)(6)

第一张图为啥报错了呢?其实也很容易理解了,python3默认UTF-8编码,你现在把你的python文件设置为GDK编码,那肯定报错啊。但是我要是在程序的前面,

我们声明一下,我们使用gbk,程序就好了。这也是为啥我们在python2的时候开头总有这个设置文件编码的语句了。

那么问题来了,这个s是什么编码呢?其实这个s还是unicode编码。因为我们使用的是python3的解释器,默认的还是unicode或者叫做utf-8。这个# -*-coding:gbk -*-只是设置了你的文件的编码格式。它和运行的时候毛的关系都没有。这也是此时你不能再decode的原因了,我本身就是unicode,肯定就不能decode了。

python中将字符转换为编码值(Python字符编码转换)(7)

是不是又有疑问了?gbk编码竟然显示不出来这个字符串了,什么鬼?

其实这个是一个以byte类型编码gbk,显示不了这个字符串了。这个也是python3才有的。

在普及一下:Python 3对字符串和二进制数据流做了明确的区分。Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。

python中将字符转换为编码值(Python字符编码转换)(8)

依旧还是显示不出来字符串,显示的是以utf-8编码的“我爱你”这个字符串。

python中将字符转换为编码值(Python字符编码转换)(9)

看看这个gb2312和gbk的编码是不是一样的,那是必然了,都是中文编码嘛,可以认为gb2312是gbk的一个子集。

我们再来看看decode和encode的语法格式:

encode:后面跟的参数是我要编码成的格式,例如:encode(“gbk”),表示我要编码成gbk格式。

decode:后面跟的参数是我现在的格式,例如:decode(“gbk”)表示我要将gbk编码的东西解码成unicode。

python中将字符转换为编码值(Python字符编码转换)(10)

就说这么多了,有啥问题欢迎大家留言交流

更多内容请关注头条号:小5嵌入式

,