python3 编码问题汇总

Ref: py编码终极版:https://www.cnblogs.com/575dsj/p/7112767.html  有空仔细看看

印象笔记关于编码的整理

Unicode 将各国的文字,字符  一一对应一个十六进制的编号: 例如:“马”的 Unicode 是U+9A6C
Utf-8, utf-16,ASCII 将Unicode 编码变成二进制01,以不同的方式存储到字节中,如”马” 存储到文件或硬盘的二进制形式
 

常见的编码方式:  

    (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的个数暗示这个字符的字节数

常见编码之间的转换:

 
py2的解释器的默认编码方式为ASCII,所以需要写中文的 时候就需要在.py 文件开头写上#coding:utf-8  来设置默认编码方式为utf-8

py3的解释器因为默认utf8编码

在Java(其中主要包括在JVM中、内存中、在代码里声明的每一个char、String类型的变量中。)中字符只以一种形式存在,那就是Unicode,不选择任何特定的编码,直接使用它们在字符集中的编号,这是统一的唯一的方法。在JVM内部,统一使用Unicode表示,当着字符从JVM内部移出保存到文件系统或者要进行传输时,就需要进行了编码转换,使用了具体的编码方案。因此也可以说,所有的编码转换只发生在边界的地方,也就是各种输入/输出流的起作用的地方。

https://blog.csdn.net/ffghggf/article/details/83788014

下面以python3为参考说明

开始

在内存中 字符串的编码为unicode编码,而将字符串进行通讯或存储时需要将字符串编码成二进制的形式

Unicode 将各国的文字,字符 一一对应一个十六进制的编号: 例如:“马”的 Unicode 是U+9A6C
Utf-8, utf-16 将Unicode 编码变成二进制01,以不同的方式存储到字节中,如”马” 存储到文件或硬盘的二进制形式
字符串“马” ----查Unicode码表得----》 '\x9a6c'-----》转成对应的二进制 ----》以不同方式插入字节中----》utf-8/ utf-16编码的二进制形式。

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组合。

发布了118 篇原创文章 · 获赞 132 · 访问量 60万+

猜你喜欢

转载自blog.csdn.net/qfikh/article/details/103697171