带你进入编码的世界——Unicode编码

 2024-01-23 05:00:06  阅读 0

默认情况下,源代码文件以 UTF-8 编码进行处理。 在这种编码中,来自世界上大多数语言的字符可以在字符串文字、变量或函数名称以及注释中同时使用。 那么编码呢? 编码从哪里来? 如何检查字符串的编码? 今天的推文将解答您对编码的疑问。

1.什么是编码?

在计算机编程语言中,编码是指用代码来表示数据信息,使其成为计算机可以处理和分析的信息,即将数据信息从一种形式转换为另一种形式的过程。

2. 编码的历史发展和编码的起源

我们知道计算机只能处理二进制数,这为计算机提供了很高的运行速度。 我们在之前的推文中已经介绍过不同基数之间的转换,这里不再赘述。 除了数字之外,字符串也是一种数据类型。 如果计算机要处理字符串,必须首先将字符串转换为数字。 美国人发明了计算机并建立了最早的编码。 他们只将包括数字、大小写英文字母和一些符号在内的总共128个字符编码到计算机中。 这套编码表就是著名的ASCII编码表。 例如大写字母A的二进制编码为,十进制编码为65,十六进制编码为41; 小写字母a的二进制编码为,十进制编码为97,十六进制编码为61。

最早的计算机在设计时使用8位作为一个字节。 因此,一个字节可以表示的最大整数是255(二进制=十进制255)。 如果要表示更大的整数,就必须使用更多的字节。 随着科学技术的进步和科技交流,计算机技术已遍布世界各地。 128个编码字符如何涵盖世界语言的多样性? 世界各地的计算机精英在ASCII编码的基础上开发了新的编码。 比如我们的汉字,一个字节是不够处理的,至少需要两个字节。 为了对中文进行编码而不与主流的ASCII编码冲突,中国制定了该编码。

可以想象,全世界有数百种不同的语言,不同语言的国家都编制了自己的一套标准,编码冲突不可避免地会发生。 例如,在多语言混合文本编码中,应该遵循哪种编码系统? 可以想象,结果会是乱码。 为了编码界的“和平”,诞生了。 ASCII编码在二进制编码中最大为8位,而编码在二进制中最大为16位。 它可以编码比 ASCII 编码更多的字符。 编码覆盖了几乎所有语言,解决了多语言文本中的乱码问题。

一套好的代码要想保留下来,就需要不断的完善和完善。 ASCII 编码为 1 个字节,而编码通常为 2 个字节。 上面我们提到,使用ASCII编码时,大写字母A在二进制中是65,在十进制中是65。 然而汉字已经超出了ASCII编码的范围。 例如,汉字“爬”不能用ASCII编码。 编码二进制为01100,十进制编码为01100.到29229。那么如果我们想要对ASCII编码的字符进行编码,只需要在前面加0即可。

如果编码统一的话,程序员的编码过程中不排除全是英文的情况。 如果此时仍采用该编码,则存储空间将是原来ASCII编码的两倍,并且计算机的运行速度将大大降低。 节俭是一种美德! 由编码转换而来的UTF-8编码应运而生。 UTF-8编码会根据字符的大小将字符编码为1-6个字节。 英文字符编码为1个字节,汉字通常为3个字节,特别复杂的字符编码为4-6个字节。 下图展示了UTF-8编码的字节数对应的存储范围和存储格式。 这样就解决了储存和运输问题。

编码转换中文_十六进制编码转换中文_c unicode编码转换中文

3. 内置函数ord(c)和chr(i)

如今,编码广泛应用于网络、系统和许多大型软件中。 默认情况下,源文件采用 UTF-8 编码,并且所有字符串均进行编码。 之前的推文已经给大家介绍了很多内置函数,这里我们将介绍两个关于编码的内置函数。

1.ord(c)函数

对于单字符字符串,ord(c) 函数返回字符串 c 的整数编码码点。 作为验证,我们输入上面提到的字母“A”和汉字“爬”,查询返回的码点整数及其对应的二进制数。

In [1]: ord('A')Out[1]: 65In [2]: bin(65) #将十进制转化为二进制Out[2]: '0b1000001'In [3]: ord('爬')Out[3]: 29228In [4]: bin(29228)Out[4]: '0b111001000101100'

输出结果与上面提到的一致。

2.chr(i)函数

chr(i) 函数是ord(c) 函数的反函数,它返回编码为整数i 的字符的字符串格式。 例如,如果我们想知道编码为整数65和整数520的字符串,我们可以这样得到:

In [5]: chr(65)Out[5]: 'A'In [6]: chr(520)Out[6]: 'Ȉ'

输出显示编码为整数 65 和 520 的字符串分别是字母“A”和符号“ş”。 这对互逆函数兄弟的用法介绍就到此结束了。 这是一个有趣的例子。

3. 字符串大小比较

我们知道数字可以比较大小,但是字符串在计算机中可以比较大小吗? 答案是肯定的。 设置两个字符串str1='a',str2='b',然后比较两个字符串的大小。

In [7]: str1 = 'a'str2 = 'b'print(str1 > str2)False

输出结果为False,即字符串'a'不大于字符串'b'。 下面给大家科普一下小知识。 将字符串中字符串的大小比较转换为对应字符的编码大小。 我们使用刚刚介绍的ord(c)函数来计算它们的编码。

In [8]:print(ord('a'))print(ord('b'))Out[8]:9798

从输出结果可以看出,a的编码是97,b的编码是98,所以输出结果为False。 是不是很有趣?

这就是编码问题的全部内容!

如果爬虫俱乐部推文累计奖励超过1000元,我们将为您开具发票,发票类别为“咨询费”。 用心做事,只为成为一个更贴心的小爬虫!

过去各期的推荐推文

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令。 欢迎转载和打赏。 爬虫俱乐部是在李春涛教授的带领下,由研究生和本科生组成的大数据分析和数据挖掘团队。

另外,欢迎大家贡献并介绍一些关于stata的数据处理和分析技巧。

提交邮箱:

提交要求:

1)必须原创,禁止抄袭;

2)必须准确、详细,并附有示例和截图;

防范措施:

1)所有提交的作品将由公众号运营团队成员审核。 审核通过者方可录用。 一旦被接受,作者将在推文中签名并获得一部分赏金。

2)请在邮件中注明您的贡献,邮件名称应为“投稿+推文名称”。

3)应读者要求,现提供付费问答服务。 如果您遇到stata分析数据的问题,可以在公众号中提问。 您只需支付少量赏金,我们将在后续推文中予以答复。

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码