Ref: py编码终极版:https://www.cnblogs.com/575dsj/p/7112767.html 有空仔细看看
印象笔记关于编码的整理
常见的编码方式:
(1)ASCII码:共有128个,用一个字节的低7位表示
(2)ISO8859-1:在ASCII码的基础上涵盖了大多数西欧语言字符,仍然是单字节编码,它总共能表示256个字符 包含ASCII
(3)GB2312:全称为《信息交换用汉字编码字符集基本集》,它是双字节编码,总的编码范围是A1~F7
A1~A9 ·符号区
B0~F7 汉字区
(4)GBK:数字交换用汉字编码字符集》,它可能是单字节、双字节或者四字节编码,与GB2312编码兼容
(5)UTF-16:具体定义了Unicode字符在计算机中的存取方法。采用2字节来表示Unicode转化格式,它是定长的表示方法,不论什么字符都可以用两个字节表示
(6)UTF-8: UTF-8采用一种变长技术,每个编码区域有不同的字码长度,不同的字符可以由1~6个字节组成。
如果一个字节,最高位为0,表示这是一个ASCII字符(00~7F)
如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数
常见编码之间的转换:
py3的解释器因为默认utf8编码
在Java(其中主要包括在JVM中、内存中、在代码里声明的每一个char、String类型的变量中。)中字符只以一种形式存在,那就是Unicode,不选择任何特定的编码,直接使用它们在字符集中的编号,这是统一的唯一的方法。在JVM内部,统一使用Unicode表示,当着字符从JVM内部移出保存到文件系统或者要进行传输时,就需要进行了编码转换,使用了具体的编码方案。因此也可以说,所有的编码转换只发生在边界的地方,也就是各种输入/输出流的起作用的地方。
https://blog.csdn.net/ffghggf/article/details/83788014
下面以python3为参考说明
开始
在内存中 字符串的编码为unicode编码,而将字符串进行通讯或存储时需要将字符串编码成二进制的形式
python3 定义创建一个字符串 “马” 查unicode表可以得到 其对应的16进制的unicode编码为 '\x9a6c', 对应的二进制为: 1001 1010 0110 1100; s.encode("utf-8") 就是上图二进制编码的过程(为什么这么编码,还需要研究),填充完之后就变成了 另一个二进制 ,也就是上图图的二进制。然后就可以进行文件传输或存储了。 注意:一个汉字占三个字节,二进制11101001 对应的十进制为233,对应的十六进制为\xe9。
bytes实际上是一串0和1的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b'\xe4\xb8\xad\xe6\x96\x87'
这种形式,开头的b
表示这是一个bytes
类型。\xe4
是十六进制的表示方式,转化为十进制就是228,转化为二进制就是0b11100100 ,所以可以\xe4就是二进制字节流的表现形式,
它占用1个字节的长度。bytes
是一种比特流,它的存在形式是01010001110这种。我们无论是在写代码,还是阅读文章的过程中,肯定不会有人直接阅读这种比特流,它必须有一个编码方式,使得它变成有意义的比特流,而不是一堆晦涩难懂的01组合。