21
2019-03-14 本文已影响0人
可爱叽叽
——字符编码——
#在python2.x上执行
执行如下一段代码,把s转为gbk格式:
![](https://img.haomeiwen.com/i15050389/b47529a6dea85bb5.png)
报错:
![](https://img.haomeiwen.com/i15050389/431f56245696c62b.png)
原因是:如果直接进行编码,它会用默认的字符编码级进行解码,然后再进行编码。python2.x默认的字符编码级为ASCII。所以解码s是ASCII码的形式,ASCII码又不支持中文,所以报错了。
我们可以打印一下默认的string编码格式,调用sys.getdefaultencoding():
![](https://img.haomeiwen.com/i15050389/16cf10d2c5c573a2.png)
可以看到是ASCII码:
![](https://img.haomeiwen.com/i15050389/c91ad0d8eeb1ccfa.png)
所以我们必须要先进行解码,把s解码成Unicode,然后再进行编码。我们先进行解码看一下:
![](https://img.haomeiwen.com/i15050389/bc129e4f14c0a8e5.png)
结果如下,Unicode支持中文所以可以显示。
![](https://img.haomeiwen.com/i15050389/8c88c3e361d01410.png)
我们可以打印一下s_to_unicode的类型:
![](https://img.haomeiwen.com/i15050389/7db282e1d728ca93.png)
接下来,我们把utf-8的数据转换成gbk的形式:
![](https://img.haomeiwen.com/i15050389/785831cc3fee3efb.png)
是不能打印出来的:
![](https://img.haomeiwen.com/i15050389/2a4e7aae2630e386.png)
原因是:terminal 不支持gbk格式。
我们要更改会话的字符编码级。
字符编码级为utf-8形式时,可以显示utf-8,可以显示Unicode,不可以显示gbk。
字符编码级为gbk时,可以显示gbk,不可以显示utf-8,也不可以显示Unicode。
以上是utf-8转换为gbk。
那gbk转换为utf-8呢?
![](https://img.haomeiwen.com/i15050389/665c8d23f3015b6e.png)
结果打印显示“你好”。
我们在你好前面加个u,以前的你好是utf-8格式,在前面加个u,现在的s就是Unicode格式,可以直接进行打印:
![](https://img.haomeiwen.com/i15050389/433c7b7fd41a576e.png)
结果显示“你好”。