python 3字符编码
官方链接:http://legacy.python.org/dev/peps/pep-0263/
在Python2中默认是ascii编码,Python3是utf-8编码
在python 的源代码文件中经常会看到:
# -*- coding: latin-1 -*-
这句话要写在文件的第一行或者第二行才有效果
这句话是声明Python源文件的编码方式。这个编码信息会在Python 解释器去解释这个文件时用到,使用这种编码方式去解释这个文件
因为所有文本,图片,声音,视频保存在磁盘中都必须是二进制的数据,对于文本,需要先转化为二进制然后才能保存在磁盘中,所以就出现了编码,
廖雪峰字符编码博客链接: https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819196283586a37629844456ca7e5a7faa9b94ee8000
关于unicode 编码,unicode编码
为了解决各国文字使用不同的编码造成的问题,出现了unicode,一个字符用两个字节表示
但是Unicode 在存储和传输的过程中,如果一个文件都是ascii 编码,用unicode 存储或传输,会造成很大的资源浪费。所以出现了utf-8 ,utf-16
utf-8 是变长编码,对于英文用一个字节表示,汉字用3个字节表示。避免了浪费。
在现代计算机的内存中普遍用 Unicode编码。
在python 中,文本类型统一用str 类型表示,二进制数据用bytes 类型表示。
>>> a='中文' >>> type(a) <class 'str'> >>> b=bytes(a,encoding='utf-8') >>> b b'xe4xb8xadxe6x96x87' >>> type(b) <class 'bytes'> >>>
以上的代码都在Python 的内存中,可以看到将a 转换为二进制数据,占了6个字节, 在计算机中为了方便显示,通常用16进制来表示2进制数据
因为一个16进制位可以用4个二进制位来表示。
e4实际上一个字节大小,e 1110 4 0100 e4 用二进制就是11100100
>>> c=bytes(a,encoding='gbk') >>> c b'xd6xd0xcexc4' >>>
当用gbk 编码去转换为二进制的时候,就成了4个字节,在gbk 中,一个中文字符用2个字节来表示
一般在一个字符前面加u 表示是unicode 字符, 0x是十六进制数,0x 是八进制数。0b 是二进制数
用内置函数bin() oct() hex() 可以进行各进制的转换
>>> d=0xE4 >>> bin(d) '0b11100100' >>> d=0b11100100 >>> hex(d) '0xe4' >>>
>>> chr(65) 'A'>>> ord('A') 65 >>>