李优秀 发表于 2024-12-31 02:12:55

字符串编码(ASCII, GBK, ANSI, Unicode(‘u‘), UTF-8编码)(转载)

【版权声明】本篇文章以征得博主同意,再行转载。
出自【hxxjxw】
原文链接:https://blog.csdn.net/hxxjxw/article/details/90140663

目录

[*]字符串编码的发展
[*]GBK编码
[*]ANSI码
[*]Unicode编码
[*]UTF-8

字符串编码的发展

1、起首,计算机只能处理数字,文本转换为数字才能处理。计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255
因为计算机是美国人发明的,所以一个字节可以表示全部字符了,所以ASCII(一个字节)编码就成为美国人的标准编码(ASCII, American Standard Code for Information Interchange, 美国标准信息交换码)
2、但是ASCII处理中文显着是不够的,中文不止255个汉字,所以中国订定了GB2312编码,用两个字节表示一个汉字。GB2312还把ASCII包罗进去了,同理,日文,韩文等等上百个国家为了解决这个题目就都发展了一套字节的编码,标准就越来越多,如果出现多种语言混合显示就肯定会出现乱码
3、于是unicode出现了,将全部语言统一到一套编码中
看一下ASCII和unicode编码:
1)字母A用ASCI编码十进制是65,二进制01000001
2)汉字“中”已近超出了ASCII编码的范围,用unicode编码是20013二进制是0100111000101101
3)A用unicode编码只需要前面补0二进制是0000000001000001
https://img2024.cnblogs.com/blog/3134074/202412/3134074-20241231025658497-798699122.png
节选
4、乱码题目解决了,但是如果内容全是英文,unicode编码比ASCII需要多一倍的存储空间,同时如果传输需要多一倍的传输。
当文件很多的时候,这一倍空间现实上黑白常大的(如果1个T的话想一下,而一个T在大公司内里是很常见的)
5、所以出现了可变长的编码“utf-8",把英文变长一个字节,汉字3个字节。特别生僻的酿成4-6字节,如果传输大量的英文,utf8作用就很显着
中文当然就没有减少空间
utf8编码在文件存储或网络传输的时候的优势就特别大
但是如果实在内存种的时候字符串有的占1个字节,有的2个,就很欠好捉摸
所以unicode编码虽然占用空间,但是在编程的时候,在内存内里处理的时候比会utf8更简单,因为它们都是一样的长度
所以一样平常是做文件保存或网络传输的时候,将unicode编码转换成utf8编码
从文件内里读取数据的时候,将utf8编码转换成unicode编码来进行处理
python3字符串在内部中全部使用unicode进行编码的
GBK编码

GBK编码专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。
由于ASCII编码不支持中文,因此,当中国人用到计算机时,就需要寻求一种编码方式来支持中文。于是,国人就定义了一套编码规则:当字符小于127位时,与ASCII的字符雷同,但当两个大于127的字符连接在一起时,就代表一个汉字,第一个字节称为高字节(从0xA1-0xF7),第二个字节为低字节(从0xA1-0xFE),如许大约可以组合7000多个简体汉字。这个规则叫做GB2312。
但是由于中国汉字很多,有些字无法表示,于是重新定义了规则:不在要求低字节肯定是127之后的编码,只要第一个字节是大于127,就固定表示这是一个汉字的开始,不管背面跟的是不是扩展字符集里的内容。这种扩展之后的编码方案称之为GBK标,包罗了GB2312的全部内容,同时新增了近20000个新的汉字(包罗繁体字)和符号。
但是,中国有56个民族,所以,我们再次对编码规则进行了扩展,又加了近几千个少数民族的字符,于是再次扩展后得编码叫做GB18030。中国的程序员觉得这一系列编码的标准黑白常的好,于是齐备称他们叫做"DBCS"(Double Byte Charecter Set 双字节字符集)。
ANSI码

ANSI编码是一种对ASCII码的拓展:ANSI编码用0x00 ~ 0x7f (即十进制下的0到127)范围的1 个字节来表示 1 个英文字符,超出一个字节的 0x80~0xFFFF 范围来表示其他语言的其他字符。也就是说,ANSI码仅在前128(0-127)个与ASCII码雷同,之后的字符全是某个国家语言的全部字符。值得注意的是,两个字节最多可以存储的字符数量是2的16次方,即65536个字符,这对于一个语言的字符来说,绝对够了。还有ANSI编码其实包罗很多编码:中国订定了GB2312编码,用来把中文编进去另外,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准。受制于其时的条件,差别语言之间的ANSI码之间不能互相转换,这就会导致在多语言混合的文本中会有乱码。
Unicode编码

\u开头的就是unicode编码
因为天下国家很多,每个国家都定义一套自己的编码标准,结果相互之间谁也不懂谁的编码,就无法进行很好的沟通交换,所以实时的出现了一个组织ISO(国际标准化组织)决定定义一套编码方案来解决全部国家的编码题目,这个新的编码方案就叫做Unicode。注意Unicode不是一个新的编码规则,Unicode只是一个用来映射字符和数字的标准,是一套字符集(为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)),可以将Unicode理解为一本天下编码的字典。
Unicode编码与ASCII编码方式兼容
UTF-8

互联网的遍及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包罗 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上根本不消。重复一遍,这里的关系是,UTF-8 是 Unicode 的实现方式之一。
UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据差别的符号而变化字节长度。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 字符串编码(ASCII, GBK, ANSI, Unicode(‘u‘), UTF-8编码)(转载)