python编码

一、编码

常见的编码比较:
ascii:1个字节
unicode:2个字节
utf-8:英文1个字节,汉字3个字节

二、一个编码问题

问:如下代码设置了在代码中添加了coding: utf-8,但是在cmd下面运行的时候还是输出乱码,这是什么情况?

test.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print “你好”

答: cmd默认的编码是GBK格式的,所以只在代码里写了coding: utf-8也是不行的。

解决方案:

1.修改cmd的编码为utf-8格式:
此方法这里就不详述了,参考链接
2.使代码以gbk的格式输出:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

temp = "你好"
temp_unicode = temp.decode('utf-8')        #把utf-8解码成unicode格式
temp_gbk = temp_unicode.encode('gbk')        #把unicode编码成gbk格式
print temp_gbk

python3和与python2的差异:

对于上面解决方案中的代码可能只存在于python2中,在python3中情况就大不一样了。
在python3中utf-8编码能直接转成gbk格式的编码,在python3中代码可以写成下面这样:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

temp = "你好"
temp_gbk = temp.encode('gbk')		#在python3中utf-8编码能直接转成gbk格式的编码
print temp_gbk

三、不同场景下的字符编码方式

在现在计算机中通用的字符编码工作方式:在内存中统一使用unicode,需要保存到硬盘或要传输的时候就会转为utf-8。

  • 使用记事本编辑的时候,文件读取的utf-8字符被转换为unicode字符到内存里,编辑完成后,保存的时候再把unicode转换为UTF-8保存到文件里
  • 浏览网页时,服务器会把动态生成的unicode转换为utf-8,再传输到浏览器。因此会在网页源码上有类似的信息,表示该网页用的就是utf-8编码。

四、字符串与字节

补充

bytes类型(和int,str类似的数据类型)

s = "你好"
for i in s:
    bytes_list = bytes(i,encoding='utf-8')        #bytes可以把字符串转换为字节
    print(bytes_list)

    for j in bytes_list:    #在迭代输出16进制的字节时,默认以10进制方式输出
        print(j)

OUTPUT:
b'xe4xbdxa0'
228
189
160
b'xe5xa5xbd'
229
165
189

字符串与字节的转换

a ="你好"

b = bytes(a,encoding='utf-8')       #把字符串转换为字节类型
c = str(b,encoding='utf-8')       #把字节转换为字符串类型

print(b)
print(c)

OUTPUT:
b'xe4xbdxa0xe5xa5xbd'
你好

应用场景

两个server互相通信,如果使用utf-8编码,则通信过程如下:

原文地址:https://www.cnblogs.com/whatisfantasy/p/5951294.html