琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集


围剿四大编码——ANSI、ASCII、Unicode和UTF-8

    • 前言絮絮念
    • 字节和字符的区分
      • 一、字节
      • 二、字符
    • ASCII码
    • ANSI码
    • Unicode编码
    • UTF-8编码
    • 小总结

前言絮絮念
提到字符集,大多数小伙伴可能多会想起自己曾经在学编程的时候,要么要么别人的代码,或者搞网页开发的,浏览器一跑,啊这,怎么全是乱码...
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

遇事不决,可问度娘
【琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集】琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

一番查询之后知道是字符集没有统一的原因,快速修正,好了,问题解决,继续学习~。
但是不知道有没有小伙伴和我一样,看到乱码我知道改UTF-8,简单字符a我知道它的ASCII码是97,看到大写的A我知道它的ASCII码是65。但是你让我说说UTF-8是什么,它们的区别,我还真的什么都说不出来
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

好了,不扯闲话了,咱们是正经人,解决今天的事儿,怎么系统的区分出它们。
字节和字符的区分 一、字节
字节?!这个我熟悉呀,字节跳动嘛
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

达咩,我也在想大厂的事儿
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

回归正题
在计算机中,字节是用来计量计算机的存储容量的一个单位。英文是Byte。也就是常见的存储单位MB、GB后的这个大写的"B"。计算机汇总存储信息的最小单位是位(bit),通俗来说了,计算机的一个'0'或者一个'1'就作一位。 它们之间的关系是这种的,
八位 算作 一字节: 1Byte = 8 bit
二、字符
字符是指计算机中使用的文字和符号,比如“1、2、3、A、B、C、~!·#¥%…*()+”等等都是称为字符。
ASCII码
ASCII码应该是四个编码中最傻白甜的了,也应该是科班的同学接触的最多的了吧,大一的C语言作业应该都有 字 符 a 字符a 字符a转成 字 符 A 字符A 字符A的身影吧。
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

ASCII的全名是American Standard Code for Information Interchange, 中文翻译过来是美国信息交换标准码
ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
ASCII码可以表示的字符个数是128个字符。
对于ASCII码而言,印象最深的应该是ASCII码表了。
几个比较重要的是记住就好:0的ASCII码是48;A的ASCII码是65;a的ASCII码是97。其他的1、b、B呀是逐渐加1去递推就好。然后ASCII码就没有其他比较重要的了吧(狗头保命)。
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

我把表放这儿啦,不用去百度啦,本来就是趁着取快速的时间看会CSDN,不用切换边百度了。
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

ANSI码
ANSI码是对ASCII码的一种拓展。因为ASCII码表示的128个字符是不能满足咱们的需求的。
ANSI编码用0x00~0x7f (即十进制下的0到127)范围的1 个字节来表示 1 个英文字符,超出一个字节的 0x80~0xFFFF 范围来表示其他语言的其他字符。也就是说,ANSI码仅在前128(0-127)个与ASCII码相同,之后的字符全是某个国家语言的所有字符。
ANSI编码其实包括很多编码:中国制定了GB2312编码,用来把中文编进去另外,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准。受制于当时的条件,不同语言之间的ANSI码之间不能互相转换,这就会导致在多语言混合的文本中会有乱码。
Unicode编码
为了解决不同国家ANSI编码的冲突问题,Unicode编码因此而生——如果全世界每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
但是问题在于,原本只是需要用一个字节存储的英文字母在Unicode里面必须存两个字节(规则就是在原来英文字母对应ASCII码前面补0),这就产生了浪费。那么有没有一种既能消除乱码,又能避免浪费的编码方式,此时,咱们可爱的UTF-8就出来了。
UTF-8编码
UTF-8是一种变长的编码方式,它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度
当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,如此一来UTF-8编码也可以是为视为一种对ASCII码的拓展。
比较有趣的是:
unicode编码中一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换
小总结
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。这种方式好巧妙,即统一了字符,又解决了乱码,还省了空间
琐琐碎碎小知识|排队取快递这会我理清楚了各种编码集
文章图片

    推荐阅读