最基础的ASCIIUnicodeUTF-8一起来多了解点

Posted 李子捌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最基础的ASCIIUnicodeUTF-8一起来多了解点相关的知识,希望对你有一定的参考价值。

ASCII

简介

ASCII(American Standard Code for Information Interchange-美国信息交换标准代码),是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,到目前为止定义了128个字符。

产生原因

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如52个英文字母、1-9的数字、常用的一些字符在计算机中存储时也需要使用二进制来表示,而具体使用什么样的二进制来表示,不同的人有不同的约定,而为了达到相互通信而不造成混乱的目的,大家就必须使用统一的编码规则,于是美国国家标准学会(American National Standard Institute, ANSI)就制定了ASCII编码,ASCII编码统一规定了上述符合用哪些二进制数来表示。

表达方式

ASCII码使用指定的7位或者8位二进制数组合来表示128种或者256种可能的字符,标准ASCII码也叫基础ASCII码,使用7位二进制数(剩余一位二进制为0)来表示所有的大些和小写字母、数组0-9、其他字符以及美式英语中使用的椰树控制字符。

标准表

十进制缩写/字符说明
0NUL(null)空字符
1SOH(start of headline)标题开始
2STX (start of text)正文开始
3ETX (end of text)正文结束
4EOT (end of transmission)传输结束
5ENQ (enquiry)请求
6ACK (acknowledge)收到通知
7BEL (bell)响铃
8BS (backspace)退格
9HT (horizontal tab)水平制表符
10LF (NL line feed, new line)换行键
11VT (vertical tab)垂直制表符
12FF (NP form feed, new page)换页键
13CR (carriage return)回车键
14SO (shift out)不用切换
15SI (shift in)启用切换
16DLE (data link escape)数据链路转义
17DC1 (device control 1)设备控制1
18DC2 (device control 2)设备控制2
19DC3 (device control 3)设备控制3
20DC3 (device control 4)设备控制4
21NAK(negative acknowledge)拒绝接受
22SYN(synchronous idle)同步空闲
23ETB (end of trans. block)结束传输块
24CAN (cancel)取消
25EM (end of medium)媒介结束
26SUB (substitute)代替
27ESC (escape)换码(溢出)
28FS (file separator)文件分隔符
29GS (group separator)分组符
30RS (record separator)记录分隔符
31US (unit separator)单元分隔符
32(space)空格
33!叹号
34"双引号
35#井号
36$美元符
37%百分号
38&和号
39闭单引号
40(开括号
41)闭括号
42*星号
43+加号
44,逗号
45-减号/破折号
46.句号
47/斜杆
480字符0
491字符1
502字符2
513字符3
524字符4
535字符5
546字符6
557字符7
568字符8
579字符9
58:冒号
59;分号
60<小于
61=等于
62>大于
63?问号
64@电子邮件符号
65A大写字母A
66B大写字母B
67C大写字母C
68D大写字母D
69E大写字母E
70F大写字母F
71G大写字母G
72H大写字母H
73I大写字母I
74J大写字母J
75K大写字母K
76L大写字母L
77M大写字母M
78N大写字母N
79O大写字母O
80P大写字母P
81Q大写字母Q
82R大写字母R
83S大写字母S
84T大写字母T
85U大写字母U
86V大写字母V
87W大写字母W
88X大写字母X
89Y大写字母Y
90Z大写字母Z
91[开括号
92\\反斜杠
93]闭开括号
94^脱字符
95_下划线
96`开单引号
97a小写字母a
98b小写字母b
99c小写字母c
100d小写字母d
101e小写字母e
102f小写字母f
103g小写字母g
104h小写字母h
105i小写字母i
106j小写字母j
107k小写字母k
108l小写字母i
109m小写字母m
110n小写字母n
111o小写字母o
112p小写字母p
113q小写字母q
114r小写字母r
115s小写字母s
116t小写字母t
117u小写字母u
118v小写字母v
119w小写字母w
120x小写字母x
121y小写字母y
122z小写字母z
123{开花括号
124
125}闭花括号
126~波浪号
127DEL (delete)删除

问题

在英语中,使用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。比如,在法语中字母上方有注音符号,它就无法使用ASCII码表示。因此,部分欧洲国家使用字节中闲置的最高位编入新的符号,最多可以表示256个字符,但是,256个字符对于字符超出这个数字的国家就不适用了,比如中国的汉字统计多大10万左右。一个字节最多只能表示256个字符,肯定是不够,要想解决这个问题,就必须使用多个字节表达一个符号。

Unicode

简介

统一码,也称万国码、单一码(Unicode)是计算机领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

编码方式

Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符/码位。码位就是可以分配给这些字符的数字。UTF-8、UTF-16、UTF-32都是讲这些数字转换到程序数据的编码方案。
Unicode字符集早期的标准有UCS-2、UCS-4的说法。UCS-2用2个字节编码,UCS-4用4个字节编码。UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个平面(plane)。每个平面根据第3个字节分为256行(row),每行有256个码位(cell)。group 0的平面0被称为BMP(Basic Multilingual Plance)。将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。
每个平面有2^16=65536个码位。Unicode计划使用了17个平面,一共16*65526=1114114个码为。在Unicode5.0.0版本中,已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。其中平面15个平面16只是定义了两个各占65534个码位的专用区(Private Use Area),分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。所谓专区就是保留给大家放自定义字符的区域,简写PUA。

实现方式

在Unicode中:汉字“字”对应的数字是23383。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:
BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8编码
WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16编码
DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32编码
这里用BYTE、WORD、DWORD分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以BYTE、WORD、DWORD作为编码单位。“汉字”的UTF-8编码需要6个字节。“汉字”的UTF-16编码需要两个WORD,大小是4个字节。“汉字”的UTF-32编码需要两个DWORD,大小是8个字节。根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。

UTF-8

简介

UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任意字符,而且其编码中的第一个字节仍然与ASCII相容,使得原先处理ASCII字符的软件无需或者只需要进行少部分的修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

编码字节数

UTF-8使用1-4字节为每个字符编码:

  • 一个US-ASCIl字符只需1字节编码(Unicode范围由U+0000~U+007F)。
  • 带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字母则需要2字节编码(Unicode范围由U+0080~U+07FF)。
  • 其他语言的字符(包括中日韩文字、东南亚文字、中东文字等)包含了大部分常用字,使用3字节编码。
  • 其他极少使用的语言字符使用4字节编码。

字符集

编码方式16进制编码
UTF8-1\\x00-\\x7F
UTF8-2\\xC2-\\xDF \\x80-\\xBF
UTF8-3\\xE0 \\xA0-\\xBF \\x80-\\xBF

\\xE1-\\xEC \\x80-\\xBF \\x80-\\xBF
\\xED \\x80-\\x9F \\x80-\\xBF
\\xEE-\\xEF \\x80-\\xBF \\x80-\\xBF |
| UTF8-4 | \\xF0 \\x90-\\xBF \\x80-\\xBF \\x80-\\xBF
\\xF1-\\xF3 \\x80-\\xBF \\x80-\\xBF \\x80-\\xBF
\\xF4 \\x80-\\x8F \\x80-\\xBF \\x80-\\xBF |

总结

对比

编码大小支持语言
ASCII1个字节英文
Unicode2个字节(生僻字4个字节)所有语言
UTF-81-6个字节,英文1个字节、汉子3个字节、生僻字4-6个字节所有语言

计算机系统通用的字符编码方式

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

场景一:

用记事本编辑文本时,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件中。

场景二:

浏览网页时,服务会把动态生成的Unicode内容转换为UTF-8再传输给浏览器。

以上是关于最基础的ASCIIUnicodeUTF-8一起来多了解点的主要内容,如果未能解决你的问题,请参考以下文章

ASCIIUnicodeUTF-8编码关系

编码历史ASCIIUnicodeutf-8和GBK

ASCIIUnicodeUTF-8 字符串和编码

编码彻底弄懂ASCIIUnicodeUTF-8之间的关系

常见三种字符编码的区别:ASCIIUnicodeUTF-8

常见三种字符编码的区别:ASCIIUnicodeUTF-8