当前位置: 首页 > 后端技术 > Java

关于ASCII、Unicode、UTF-8、GBK

时间:2023-04-01 23:03:21 Java

的一些知识扩展知识:字节(byte):计算机中的基本存储单位位(bit):计算机中的最小存储单位1byte=8bit字:计算机承载outdata在处理时,一次存取、处理和传输的数据长度称为字(word),一个字通常由一个或多个字节组成。16位计算机:一个字长为16位,两个字节。32位计算机:一个字长为32位,四个字节。理解:ASCII码在计算机内部,所有数据都是用二进制表示的。每个二进制位(bit)都有0和1两种状态,所以8个二进制位可以组合成256种状态,称为一个字节(byte)。一个字节总共可以表示256个不同的状态,每个状态对应一个符号,也就是256个符号,从0000000到11111111。ASCII码:在1960年代,美国制定了一套字符编码,它对英文字符与二进制数字的关系作了统一规定。这称为ASCII码。ASCII1码一共规定了128个字符的编码,如空格“SPACE”为32(二进制00100000),大写字母A为65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号)只占一个字节的后7位,前1位统一指定为0。ASCII的缺点:不能表示所有的字符。同一种编码表示的字符不同:比如130在法语编码中表示é,但在希伯来语编码中表示字母Gimel(:):理解:Unicode编码乱码:世界上有很多种编码方式,相同的二进制数可以解释为不同的符号。因此,如果要打开一个文本文件,就必须知道它的编码方式,否则如果用错误的编码方式进行解释,就会出现乱码。Unicode:一种包含世界上所有符号的编码。每个符号都被赋予唯一的编码,使用Unicode时不存在乱码问题。Unicode的缺点:Unicode只规定了符号的二进制编码,而没有规定二进制编码应该如何存储:无法区分Unicode和ASCII:计算机无法区分三个字节分别代表一个符号还是代表三个符号。另外,我们知道英文字母只用一个字节来表示。如果unicode统一规定每个符号用三四个字节表示,那么每个英文字母前必须有两三个字节。为0,这是对存储空间的极大浪费。这时候我们就需要一个Unicode编码的实现。理解:UTF-8UTF-8是Internet上使用最广泛的Unicode实现。UTF-8是一种可变长度编码。它可以用1-6个字节来表示一个符号,字节长度根据不同的符号而不同。UTF-8编码规则:对于单字节的UTF-8编码,字节的最高位为0,其余7位用于字符编码(相当于ASCIl码)。对于多字节的UTF-8编码,如果编码包含n个字节,那么第一个字节的前n位为1,第一个字节的第n+1位为0,其余字节的位用于编码字符。第一个字节之后的所有字节,最高两位都是“10”,剩下的6位用来对字符进行编码。理解:GBKGBK:专门用来解决中文编码,双字节。在国家标准GB2312的基础上扩展后兼容GB2312标准。包含所有汉字。UTF-8:一种解决国际体系的多字节编码,英文使用8位(1字节),中文使用24位(3字节)。对于英文字符较多的论坛,UTF-8适合节省空间。包含世界各国所需的字符。简而言之,GBK编码的编码是根据中国国情创造的,国际兼容性不好,这也是为什么大多数网页都使用UTF-8编码而不是GBK的原因。