从ASCII码到Unicode,最终选择UTF-8编码的趣事【学习笔记】

2023-12-25 15:32

本文主要是介绍从ASCII码到Unicode,最终选择UTF-8编码的趣事【学习笔记】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

https://www.bilibili.com/video/BV1h7411V7Xw?from=search&seid=6458930640632168365

上面链接位B站视频链接,讲的是字符串编码,是我所看到的讲解最好的一个,希望对你有帮助。

上一张图:

以下位对上图的一种解释。

在计算机中,基本的存储单位为位:bit 一个位可以表示两种数字0和1,一个字节(Byte)= 8位(bit)

可以表示成256种组合

如何把数字汉字等字符存储在计算机中,工程师们发明了一种ASCII 码,上个实际60年代,美国人制造出来一种编码方式,将英文字符与字节做了统一的规定,ascii中包含字母、数字、符号共计128个。

 

需要注意的是Ucicode只是一个字符集,它只规定了符号的二进制代码,却没有给出这个二进制代码应该如何对应进行存储,具体该使用几个字节来存储一个字符,因此,Unicode不适于直接用来编码存储字符,为此,人们设计了utf-8的编码, 它是在互联网上广泛使用的一种unicode编码实现方式,使用它可以使用1-4个字节表示一种字符,根据不同的符号变化长度,目前多数语言都支持uft-8编码,它是一种最通行的编码方式。

 

5.早期的程序设计语言中都使用ASCII码每一个字节来保存一个字符,一个字符对应一个字节,后来,由于多种语言的出现,使用的编码方式有所改变,字符和字节就不是一一对应的关系了,

例如:一个汉字当以utf-8编码方式存储时,它占3个字节;

print(str1.encode(encoding = 'utf-8')) b'\xe6\x88\x91' print(len(str1.encode(encoding = 'utf-8'))) 3

一个汉字当以gb2312或gbk编码方式存储时,它占2个字节。

print(str1.encode(encoding = 'gbk')) b'\xce\xd2' print(len(str1.encode(encoding = 'gbk'))) 2

print(str1.encode(encoding = 'gb2312')) b'\xce\xd2' print(len(str1.encode(encoding = 'gb2312'))) 2

Python中默认是以字符来进行存储的,因此,汉字和字母具有相同的地位:在计算字符长度时,一个字母和一个汉字的字符长度都为1。

 

 

 

 

 

 

--------------------------------------------------------

 

 

 

 

 

 

理解2:(这个貌似没有上一种好理解)

视频链接地址:字母,符号和神奇的Unicode

希望感兴趣的可以看一下。

整理的不是很详细,仅供参考。

今天在看视频的时候,发现一个国外的讲解关于UTF-8的这样的一个发展。

在早期的20世纪60年代,人们通过一些电传设备,一边发送了一些数字,另一边会出现同一个字母,但在20世纪60年代中期,需要有一个标准以使其规范,美国采用了ASCII码,这是美国信息交换标准代码,它是一个7位的二进制系统(应该是8位,第1位是0),你输入的每个英文字母,都可以转换成7个二进制数并通过网络发送,这意味着您可以拥有0-127之间的数字,它的前32位表示的是一些空格,回车之类的字符,在后面他们又添加了一些数字,标点符号等,很聪明的一件事是用65来表示’A‘。用二进制表示就是0100 0001,并且也出现了用97表示的小写的字母‘a’,而进制表示就是0110 0001。

随着时间的推移,事情发生了一些变化,全世界各个国家使用的语言的符号不一样,ASCII码不够用了,后来就出现了Unicode编码,Unicode现在有一个超过十万个字符的列表,涵盖了你可能用任何语言书写的所有内容,有英文字母,中文,阿拉伯字母字符,最后得到的是10万多个数字分配的10万多个字符。

 

与三个问题需要注意:1.你必须摆脱英文文本中所有的0。2许多旧计算机系统对理解连续的8个0,会输出一个null,当连续发送8个0的时候,它就会终止接收,所以不能在任何地方连续使用8个0。3必须考虑向后兼容,您必须能够使用Unicode文本将其放入只能理解基本的ASCII的内容中,并且或多或少的为英文文本工作

utf-8解决了这些所有的问题,它首先采用ASCII,如果你有128以下的东西,那可以表示用7位二进制数来表示,如果需要更多的表示我就就先写出110,这意味着这是一个新字符的开头,这个字符长度为2个字节,一个字节为8位,而后我们将用10作为延续,在左右的空白的地方可以补充01。

 

 

这篇关于从ASCII码到Unicode,最终选择UTF-8编码的趣事【学习笔记】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/536000

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学