从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

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

exfat和ntfs哪个好? U盘格式化选择NTFS与exFAT的详细区别对比

《exfat和ntfs哪个好?U盘格式化选择NTFS与exFAT的详细区别对比》exFAT和NTFS是两种常见的文件系统,它们各自具有独特的优势和适用场景,以下是关于exFAT和NTFS的详细对比... 无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析