常见编码格式

news/2024/7/19 10:16:32 标签: python, perl, 爬虫

在这里插入图片描述

1、ascii

计算机是美国人发明的,因此,最早只有128个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码.
ascii只占一个字节,00000000–01111111,一对一关系,二进制代表一个字符
在这里插入图片描述

2、GB2312-80

只需要记住这个是我国发明的,包含了常用汉字和拉丁字母、平假名等,占两个字节,一对一关系,一个二进制码对应一个文字

3、Unicode

各个国家都像我们一样,有自己的编码方式,在自己国家使用没有问题,但是国家与国家之间交流的时候就会出现问题,编码方式不一样,导致乱码,所以出现了Unicode
Unicode目前涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,部分字符对应的编号,可以看到unicode的前128个字符的编号和ascii一样
但是注意Unicode只是规定了字符对应的编码,没有规定如何存储,这是和ascii,GB2312-80等不一样的地方,ascii等不仅是规定了字符对应的编码是多少,还规定了存储,比如ascii只能用一个字节存储,GB2312-80只能用两个字符来存储
unicode为什么不规定如何存储?如果规定了字节数,为了满足所有的字符需求,这个字节数必然很大,但是对于只需要一个字节的字符的来说,造成极大的浪费。

4、utf-8

utf-8是目前最主流的Unicode编码方案之一,按照unicode的编号规则,但是存储上有优化,不是针对所有的字符采用同一个字节数,而是根据不同的字符,采用不同的字节数来存储,目前是用1-4个字节来存储,那机器如何知道这个字符是占一个字节还是4个字节?
第一个字节的第一位为0,表示单字节,和ascii一致
第一个字节的第一位为1,第二位为1,第三位为0,表示是双字节,需要和后面的那个字节一起才能表示这个字符
第一个字节的第一位为1,第二位为1,第三位为1,第四位为0,表示三字节,需要和后面的两个字节一起才能表示这个字符
第一个字节的第一位为1,第二位为1,第三位为1,第四位为1,第五位为0,表示四字节,需要和后面的三个字节一起才能表示这个字符
同时多字符的情况下,后面的所有字符都是以10开头
比如:

110XXXXX 10XXXXXX    //第一个字节是两个1,所以这是两个字节表示的字符,后面的那个字节开头必须是10,这个是固定,记住就是了
11110XXX 10XXXXXX   10XXXXXX  10XXXXXX  //第一个字节是四个1,所以这是四个字节表示的字符,剩下的3个字节都是以10开头的,固定的,记住就是了

所以通过这样子的方式,就能用几个字节就表示很多的字符,而且不造成浪费

5、utf-16

utf-16和utf-8一样都是按照unicode的编号规则,为了减少浪费,有自己的存储规则,但是和utf-8的区别就是存储方式不一样

混淆点:
字符集:字符的集合,比如ascii定义了128个字符,比如GBK(GB2312-80的延伸,都是我国发明的,针对中文的编码方式)定义了5448个字符

字符码:将字符集内的所有字符编号,一个编号对应一个字符,这个编号就是字符码,比如ascii规定‘d’的编号就是100(10进制)

字符编码:具体的实现方式,针对相同的编号,不同的编码方式可能在二进制的表示上是有不同的,比如utf-8和utf-16对于同一个字符,他在计算机的二进制表示上是不一样的

注意区分,在unicode之前,出现一个字符集,他的编码方式也就固定了,比如ascii字符集规定了他的字符集内容,同时也规定了这个字符集内的所有字符的编码方式,一个字符只能用一个二进制表示
但是unicode之后,就不一样了,以为unicode只是提出了一个字符集,这个字符集里面有全球的字符,而且对这些字符进行了编号,但是没有规定他的编码方式,utf-8就是unicode的其中一种编码方式,utf-16也是unicode的编码方式

6、ANSI

默认的意思,比如windows默认的编码方式是GBK,所以这里的ANSI就是GBK
的意思


http://www.niftyadmin.cn/n/923393.html

相关文章

String类重写equals()方法

String类重写了equals()方法 基本数据类型: 就是比较两个值是否相等 equals是类方法,所以不能用来比较基本类型 引用类型: 引用类型的变量中存储的是对象的地址 就是比较的这两个地址是否相同 equals()就是比较指向的…

方法重载Overload

方法重载:是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数 方法重载只与方法名和参数有关系,和修饰符或者返回值没有关系 1、方法名一定要相同 2、参数个数不同,一定是重载 3、参数个数相同&a…

JVM(java虚拟机)内存分布

运行java代码的时候: 1、jvm向内存要一块内存空间,默认64MB 2、jvm的内存划分 a、寄存器 b、本地方法栈:jvm在使用操作系统的时候使用,调用native方法 c、方法区(数据共享区):.class文件加载在这…

修饰符关键字

1、权限修饰符 private :只能在本类中访问,可以修饰成员变量,成员方法,不可以修饰类 protected:可以在本包中访问,在其他包的子类也可以访问本包的父类的继承方法,可以修饰成员变量,…

构造方法问题

1、格式 访问权限修饰符 方法名(参数) 注意: 访问权限修饰符:public 方法名:必须和类名一致 参数:可省略 2、作用 1、创建对象 2、给成员变量赋值 3、什么时候调用 创建对象的时候调用,创建一…

匿名对象问题

这篇文章写得很清楚了 https://blog.csdn.net/chen13579867831/article/details/78877666

方法重写注意事项

方法重写注意事项 1、前提&#xff1a;子类继承父类&#xff0c;private属性不能被继承 2、子类的方法声明必须和父类保持一致 3、可以使用override来验证是否是方法重写 4、子类的访问权限必须大于等于父类的访问权限 默认<protected<public 5、子类方法的重写&#xff…

变量名或者方法名重名

局部变量和成员变量重名&#xff0c;子类和父类方法重名&#xff1a; 1、变量的就近访问原则 局部>本类成员变量>父类成员变量 本类方法名>父类方法名 2、super this super.成员变量 可以访问父类的非private成员变量 this.成员变量 可以访问子类的成员变量 super.方…