计算机编码ASCII,GBK,Unicode,UTF-8和URL编码之间的区别

电脑杂谈  发布时间:2020-09-19 04:02:17  来源:网络整理

5053编码电脑_电脑系统编码_哈夫曼编码和译码系统

计算机编码ASCII、GBK、Unicode、UTF-8和URL编码的区别

在计算机中,所有数据在存储和操作期间都必须用二进制值表示(因为计算机分别使用高电平和低电平表示1和0),并且使用哪个二进制数表示哪个符号,当然,每个人都可以在自己的集合上达成共识(这称为编码),如果每个人都希望彼此沟通而又不引起混淆,那么每个人都必须使用相同的编码规则,这就是统一编码的原因。是字符和值之间的对应关系。下面我们详细介绍不同代码的编码规则和应用。

ASCII编码

ASCII码是由美国相关的标准化组织发行的,后来被国际标准化组织(ISO)指定为国际标准,称为ISO 646标准。该标准统一规定了常见字符(52个字母,例如a,b,c和d(包括大写字母)和数字,例如0、1),以及一些常用符号(例如:%,!,+等。),共128个字符)如何使用二进制数表示。 ASCII分为标准的ASCII码,使用7位二进制数字组合表示128种字符,扩展的ASCII 8位二进制数字组合表示256种字符。

0-127中包含的代码称为标准ASCII代码,例如:空格SPACE为32(二进制0010000 0),大写字母a为97(二进制01100001)。这128个符号(包括32个控件)无法打印的符号仅占用一个字节的后7位(8位),并且第一位统一定义为0。

以下是标准ASCII代码表:

计算机编码ASCII、GBK、Unicode、UTF-8和URL编码的区别

最后128个称为扩展ASCII码。扩展的ASCII代码允许每个字符的第8位用于确定其他128个特殊符号字符,内的2个字节表示1个字符。例如:中文字符“中”在中文操作系统中,两个字节0xD6、0xD0用于存储。但是,不同的国家和地区制定了不同的标准,从而产生了GB2312、GBK,GB1803 0、Big5、Shift_JIS和其他相应的编码标准。这些使用多个字节表示一个字符的各种扩展编码方法称为ANSI编码。在简体中文Windows操作系统中,ANSI代码代表GBK代码;在繁体中文Windows操作系统中,ANSI代码代表Big5;在日语Windows操作系统中,ANSI代码代表Shift_JIS代码。不同的ANSI代码彼此不兼容。在国际上交换信息时,不可能将属于两种语言的文本存储在同一ANSI编码文本中。 ANSI编码使用1个字节表示英文字符,使用2或4个字节表示中文。

Unicode

因为世界上有许多国家,每个国家定义了一套自己的编码标准。结果,他们无法解析通信代码。因此,ISO(国际标准化组织)决定定义一套编码方案以解决所有国家。这种新的编码方案称为Unicode。请注意,Unicode不是新的编码规则,而是一组字符集(为每个“字符”分配唯一的ID(科学名称代码点/代码点/代码点)),Unicode可以理解为世界编码字典。可以查询特定符号对应表或特殊汉字对应表。

如何在Python中查看字符的Unicode值:

>>> "中".encode("unicode_escape")
b'\\u4e2d'
>>> b'\\u4e2d'.decode("unicode_escape")
'中'

应注意,Unicode只是一个符号集,它仅指定符号的二进制代码,而不指定应如何存储二进制代码。例如,严格的汉字Unicode是十六进制数4E25,它将转换为15位的二进制数(0101),即此符号的表示至少需要2个字节。表示其他较大的符号,它可能需要3个字节或4个字节,甚至更多,这里有几个严重的问题,第一个问题是,计算机如何区分Unicode和ASCII?计算机如何知道三个字节代表一个符号而不是代表第二个问题是我们已经知道英语字母只用一个字节表示,如果Unicode统一规定,每个符号使用三个或四个字节均值,那么每个英语字母前必须有2到3个字节的0 ,这对于存储或传输来说是非常浪费的,因此文本文件的大小将是原来的2到3倍,这是不可接受的。结果是:存在多种Unicode,就是说,有许多不同的二进制格式可用于表示Unicode。这也导致Unicode在UTF编码出现之前很长一段时间都无法普及。

UTF-8编码

电脑系统编码_哈夫曼编码和译码系统_5053编码电脑

由于Unicode浪费了网络和硬盘资源,因此为了解决此问题,基于Unicode定制了一套编码规则(将“代码点”转换为字节序列的规则[编码/解码可以理解对于加密/解密过程],此新的编码规则为UTF-8。 UTF-8使用1-4个字符来传输和存储数据。它是Unicode的变长字符编码,也称为通用代码。

Unicode和Utf-8编码规则:使用以下模板进行相互转换

Unicode符号范围(十六进制)| UTF-8编码方法(二进制)

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

0 007F | 0xxxxxxx

0 07FF | 110xxxxx 10xxxxxx

0 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

0 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

相应模板加上标志位后的Unicode字符为Utf-8。例如,“ Mi” Unicode的编码为\\ u8ff7,并以二进制表示为:‭10111‬,8ff7在第三个模板范围内,根据模板1000 111111 110111将10111分为三部分,然后是二进制该标志位为:11因此utf-8编码为“‭E8BFB7‬”

将Unicode字符转换为Python中的UTF-8编码:

>>>'迷'.encode('utf-8')
b'\xe8\xbf\xb7'

那么如何区分utf-8的字符? utf-8根据编码的高字节来区分每个字符的开头,例如:一个字符代表一个字节,第一个字节的高字节以“ 0”开头;一个由两个字节表示的字符,第一个字节的高位以“ 110”开头,下一个字节以“ 10”开头;对于由三个字节表示的字符,第一个字节以“ 1110”开头,后两个字节以“ 10”开头;对于由四个字节表示的字符,第一个字节以“ 11110”开头,随后的三个字节以“ 10”开头。这样,计算机可以识别出每个字符包含几个字节,并可以显示正确的信息。

UTF-8和Unicode转换

例如,汉字“智”,utf-8代码为“ \ xe6 \ x99 \ xba”,相应的二进制为:“ 11”。由于utf-8中的汉字为3个字节,因此相应的模板为:

0 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

5053编码电脑_哈夫曼编码和译码系统_电脑系统编码

11 |以UTF-8编码的二进制1110xxxx 10xxxxxx 10xxxxxx |对应模板0110 011001 111010 |删除模板中的标志后,01010代表十六进制667A,因此根据规则转换,“智能” Unicode编码为667A。

同样,根据Unicode中字符的编码位置,也可以找到相应的utf-8编码。例如:UTF-8编码:\ xe8 \ xbf \ xb7,以二进制表示:‭11‬,属于第三个模板范围的3个字节,根据模板删除标志位后为:1000 111111 110111,结果是“ fan”字符的Unicode字符8ff7。

>>> b'\\u8ff7'.decode('unicode_escape')
'迷'

Unicode和GBK编码之间的转换

Unicode和GBK是两种完全不同的字符编码方案,两者之间没有直接关系。如果你想比较

相互转换的最直接,最有效的方法是查询相应的字符比较表。

Python实现Unicode和GBK之间的转换(Unicode的相应值:\\ u8ff7到GBK字符方法):

>>> l_u = b'\\u8ff7'.decode('unicode_escape')
>>> l_u.encode('gbk')
b'\xc3\xd4'

UTF-8、Unicode和GBK之间的关系

utf-8(utf-16)====编码==== Unicode =====编码===== GBK(ANSI)

utf-8(utf-16)==== decoding ==== Unicode === decoding ======= GBK(ANSI)

摘要:Unicode字符可以用UTF-8和GBK编码,相反,UTF-8和GBK也可以用Unicode解码,但是GBK和UTF-8无法直接转换,只能转换到Unicode。转到另一个代码。实际上,所谓的代码转换就是值和字符的转换。

URL编码/解码

URL编码是字符的十六进制ASCII码。但是有一些更改,您需要在前面添加“%”。例如,“ \”,其ASCII代码为92,十六进制的92为5c,因此“ \”的URL编码为%5c。汉字的URL编码怎么样?非常简单,通常有两种针对非ASCII字符的编码,它们以GBK或UTF8编码。例如:“迷”对应于UTF-8编码\ xe8 \ xbf \ xb7,则“ Hu”的URL编码为%E8%BF%B7。解码方法是先删除%,再执行UTF-8解码,即可得到实际字符。

计算机用于存储和传输数据的编码是什么?

哈夫曼编码和译码系统_5053编码电脑_电脑系统编码

支持Unicode的应用程序(Python,VS,VC,Google Chrome,记事本和其他程序)支持大多数程序(某些程序需要编码)。

不支持Unicode(例如易语言)的应用程序将存储在控制面板区域管理中设置的编码(ANSI)中,例如:简体中文(GBK),繁体中文(Big5),等)。

例如:以本地编程语言“易语言”为例,让我们看看变量存储在内存中的代码是什么

a = "你"
调试输出 (取指针地址_文本型 (a))

* 1966420

通过CE到0000E3在此存储器地址中检查相应的值,并且“ you”的GBK码正好是:E3。由此可见,Easy Language Software使用GBK编码进行数据存储和传输。

查看数据如何存储在内存中

·使用OD视图

计算机编码ASCII、GBK、Unicode、UTF-8和URL编码的区别

·使用CE查看

计算机编码ASCII、GBK、Unicode、UTF-8和URL编码的区别

多字符变量“ Hello”的GBK字符:e3bac3b0a1

外径:

计算机编码ASCII、GBK、Unicode、UTF-8和URL编码的区别

CE(显示8个字节):

计算机编码ASCII、GBK、Unicode、UTF-8和URL编码的区别

由此可以看出,内存编码方法与软件支持的编码方法一致(简单语言:GBK字符; python:Unicode字符);计算机内存数据存储通常采用big-endian模式(高位内存对数据低位,低位内存与高位数据)。 OD默认显示内存中从低到高的数据,CE默认显示内存中从高到低的数据,因此看到的十六进制值是相反的。存储空间所占用的内存大小将根据变量的数据类型进行存储。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-320319-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 陈昭旭
        陈昭旭

        而且没有任何人来管理

      热点图片
      拼命载入中...