排队取快递这会我理清楚了各种编码集

简介: 排队取快递这会我理清楚了各种编码集

前言絮絮念


提到字符集,大多数小伙伴可能多会想起自己曾经在学编程的时候,要么要么别人的代码,或者搞网页开发的,浏览器一跑,啊这,怎么全是乱码...


字节和字符的区分


一、字节


在计算机中,字节是用来计量计算机的存储容量的一个单位。英文是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码就没有其他比较重要的了吧(狗头保命)。微信图片_20221018160313.png

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保存到文件


相关文章
|
8月前
|
数据可视化 网络架构
用R语言模拟混合制排队随机服务排队系统
用R语言模拟混合制排队随机服务排队系统
|
定位技术
后端一次性返回几百万条数据怎样处理
后端一次性返回几百万条数据怎样处理
|
Windows
连续时间系统的冲激响应和零状态响应
连续时间系统的冲激响应和零状态响应
251 0
|
存储 算法 调度
C语言模拟银行排队叫号(顺序队)
C语言模拟银行排队叫号(顺序队)
252 0
|
缓存 NoSQL 算法
这么秀的操作我竟然到现在才了解到?合并请求~
在几年前,我就看到过有些博客写关于合并请求的文章,一开始我没有太在意,最近在看一个up讲述关于商品模块的牛X设计,为了提高高并发的处理能力,一般会用redis 自增自减来实现库存扣减,但是他采用合并扣减库存,也就是同一时间n个扣减库存会合并成一个请求,这样无疑减少了IO次数,也提高系统性能
298 1
这么秀的操作我竟然到现在才了解到?合并请求~
7-46 银行排队问题之单队列多窗口服务 (10 分)
7-46 银行排队问题之单队列多窗口服务 (10 分)
349 0
|
小程序
请排队-在线排队叫号小程序
排队叫号微信小程序-【请排队】的构思和实现
1417 0
请排队-在线排队叫号小程序
n个人排队都不站在原来的位置
题目描述:有n个人首先站成一排,请问,当n个人第二次再重新排列,每个人都不在原来的位置上,问有多少种站法。例如,原来有3个人,ABC,那么第二次每个人都不在原来的位置上有2种站法,BCA和CAB。
943 0
|
Go 区块链
剥开比原看代码07:比原节点收到“请求区块数据”的信息后如何应答?
作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 在上一篇,我们知道了比原是如何把“请求区块数据”的信息BlockRequestMes...
1275 0
剥开比原看代码06:比原是如何把请求区块数据的信息发出去的
作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 在前一篇中,我们说到,当比原向其它节点请求区块数据时,BlockKeeper会发送一个BlockRequestMessage把需要的区块height告诉对方,并把该信息对应的二进制数据放入ProtocolReactor对应的sendQueue通道中,等待发送。
1152 0

热门文章

最新文章