关于javascript:一次搞定-Unicode字节序UTF

5次阅读

共计 13878 个字符,预计需要花费 35 分钟才能阅读完成。

前置浏览:

  • Unicode 与 JavaScript 详解
  • 字符编码笔记:ASCII,Unicode 和 UTF-8
  • 谈谈 Unicode 编码
  • How to teach endian
  • The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

什么是字符集

顾名思义,字符集就是字符的汇合。

什么是 ASCII

ASCII ((American Standard Code for Information Interchange): 美国信息替换规范代码)是基于拉丁字母的一套电脑编码零碎,次要用于显示古代英语和其余西欧语言。

在计算机中,所有的数据在存储和运算时都要应用二进制数示意(因为计算机用高电平和低电平别离示意 1 和 0),例如,像 a、b、c、d 这样的 52 个字母(包含大写)以及 0、1 等数字还有一些罕用的符号(例如 *、#、@ 等)
既然要应用二进制数来示意字符,那具体用哪些二进制数字示意哪个符号,当然每个人都能够约定本人的一套(这就叫编码),而大家如果要想相互通信而不造成凌乱,那么大家就必须应用雷同的编码规定,于是美国无关的标准化组织就出台了 ASCII 编码,对立规定了上述罕用符号用哪些二进制数来示意。

美国信息替换规范代码 是由 美国国家标准学会 (American National Standard Institute , ANSI) 制订的,是一种规范的单字节字符编码方案,用于基于文本的数据。
它最后是美国国家标准,供不同计算机在互相通信时用作独特恪守的西文字符编码标准,起初它被 国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为 ISO 646 规范。

简略的说 ASCII 码表就是一套最根底的编码库或字符集,外面包含了字母、数字、符号以及一些控制字符。

什么是 Unicode

Unicode 是国内组织制订的能够包容世界上所有文字和符号的字符编码方案,通过 Unicode 编码规定进去的字符的汇合便叫做 Unicode 字符集。

计算机只能解决数字(0、1),如果要解决文本,就必须先把文本转换为数字能力解决。最早的计算机在设计时采纳 8 个比特(bit)作为一个字节(byte)。
一个字节能示意的最大的整数就是 255(28-1=255),而 ASCII 编码,占用 0 ~ 127 用来示意大小写英文字母、数字和一些符号,这个编码表被称为 ASCII 编码,比方大写字母 A 的编码是 65,小写字母 z 的编码是 122。

如果要示意中文,显然一个字节是不够的,至多须要两个字节,而且还不能和 ASCII 编码抵触,所以,中国制订了 GB2312 编码,用来把中文编进去。
相似的,日文和韩文等其余语言也有这个问题。为了对立所有文字的编码,Unicode 应运而生。Unicode 把所有语言都对立到一套编码里,这样就不会再有乱码问题了。

Unicode 用若干个字节示意一个字符,原有的英文编码如果想从单字节变成双字节,只须要把高字节全副填为 0 就能够。在示意一个 Unicode 的字符时,通常会用 “U+” 而后紧接着一组十六进制的数字来示意这一个字符。

目前的 Unicode 字符分为 17 组编排,0x00000x10FFFF,每组称为 立体(Plane),而每立体领有 65536(即 2 16)个码位,共 1,114,112 个。然而目前只用了多数立体。

立体 始末字符值 中文名称 英文名称
0 号立体 U+0000 – U+FFFF 根本多文种立体 Basic Multilingual Plane,简称 BMP
1 号立体 U+10000 – U+1FFFF 多文种补充立体 Supplementary Multilingual Plane,简称 SMP
2 号立体 U+20000 – U+2FFFF 表意文字补充立体 Supplementary Ideographic Plane,简称 SIP
3 号立体 U+30000 – U+3FFFF 表意文字第三立体 Tertiary Ideographic Plane,简称 TIP
4 号立体 至 13 号立体 U+40000 – U+DFFFF (尚未应用)
14 号立体 U+E0000 – U+EFFFF 特地用处补充立体 Supplementary Special-purpose Plane,简称 SSP
15 号立体 U+F0000 – U+FFFFF 保留作为私人应用区(A 区) Private Use Area-A,简称 PUA-A
16 号立体 U+100000 – U+10FFFF 保留作为私人应用区(B 区) Private Use Area-B,简称 PUA-B

其中立体 15 和立体 16 上只是定义了两个各占 65534 个码位的 专用区(Private Use Area),别离是0xF00000xFFFFD0x1000000x10FFFD。所谓专用区,就是保留给大家放自定义字符的区域,能够简写为 PUA。

立体 0 也有专用区:

  • 0xD8000xDFFF,共 2048 个码位,是一个被称作 代理区(Surrogate)的非凡区域。代理区的目标是用两个 UTF-16 字符示意 BMP 以外的字符。

Unicode 只规定了每个字符的码点,到底用什么样的字节序示意这个码点,就波及到编码方法。

Unicode 字符集有多种编码方式,别离是 UTF-8UTF-16UTF-32 /…

什么是 UTF-32

因为 Unicode 码点最大占用 4 个字节,如果 每个码点固定应用四个字节示意,字节内容一一对应码点。这种编码方法就叫做 UTF-32。比方,码点 0 就用四个字节的 0 示意,码点 59 7D 就在后面加两个字节的 0。

UTF-32 的长处在于,转换规则简略直观,查找效率高。毛病在于节约空间,同样内容的英语文本,它会比 ASCII 编码大四倍。这个毛病很致命,导致实际上没有人应用这种编码方法,HTML 5 规范就明文规定,网页不得编码成 UTF-32。

人们真正须要的是一种节俭空间的编码方法,这导致了 UTF- 8 的诞生。

什么是 UTF-8

UTF- 8 是一种变长的编码方法,字符长度从 1 个字节到 4 个字节不等。

越是罕用的字符,字节越短,最后面的 128 个字符,只应用 1 个字节示意,与 ASCII 码完全相同。

UTF-8 以字节为单位对 Unicode 进行编码。UTF-8 的编码方式如下:

  • 对于单字节的符号,字节的第一位设为0,前面 7 位为这个符号的 Unicode 码。因而对于英语字母,UTF-8 编码和 ASCII 码是雷同的。
  • 对于 n 字节的符号(n > 1),第一个字节的前 n 位都设为 1,第n + 1 位设为0,前面字节的前两位一律设为10。剩下的没有提及的二进制位,全副为这个符号的 Unicode 码。
Unicode 编码(十六进制) UTF-8 字节流(二进制) x 数量
0000 0000 – 0000 007F 0xxxxxxx 7
0000 0080 – 0000 07FF 110xxxxx 10xxxxxx 11
0000 0800 – 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 16
0001 0000 – 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 21

通过规定能够看出并不是间接把十六进制的 Unicode 码间接转成二进制就是 UTF-8 码,而是通过编码方式进行转换,原先 Unicode 编码下最大码点是 10FFFF 大小不超过 3 个字节,然而转换成 UTF-8 后最大须要用 4 个字节去示意。

这个规定的益处在于可能使解析的时候疾速确认以后字符须要多少个字节。<u>UTF-8 编码的最大长度是 4 个字节 </u>。

UTF-8 的特点是对不同范畴的字符应用不同长度的编码。对于 0x000x7F 之间的字符,UTF-8 编码与 ASCII 编码完全相同。

从上表能够看出,4 字节模板有 21 个 x,即能够包容 21 位二进制数字。Unicode 的最大码位 0x10FFFF 也只有 21 位。编码举例如下:

  • “汉”字的 Unicode 编码是 0x6C490x6C490x08000xFFFF 之间,须要应用 3 字节模板:1110xxxx 10xxxxxx 10xxxxxx。将 0x6C49 写成二进制是:0110 1100 0100 1001,用这个比特流顺次代替模板中的 x,失去:11100110 10110001 10001001,即 E6 B1 89。这里的 E6 B1 89 便是“汉”字的 UTF-8 编码。当然原先占两个字节的 Unicode 码点的进行 UTF-8 编码后的码点占 3 个字节;
  • Unicode 编码 0x20C300x0100000x10FFFF 之间,应用 4 字节模板:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。将 0x20C30 写成 21 位二进制数字(有余 21 位就在后面补 0):0 0010 0000 1100 0011 0000,用这个比特流顺次代替模板中的 x,失去:11110000 10100000 10110000 10110000,即 `F0 A0 B0 B0

什么是 UTF-16

UTF-16 编码介于 UTF-32 与 UTF- 8 之间,同时联合了定长和变长两种编码方法的特点。

它的编码规定很简略:根本立体的字符占用 2 个字节,辅助立体的字符占用 4 个字节。也就是说,UTF-16 的编码长度要么是 2 个字节(U+0000 到 U +FFFF),要么是 4 个字节(U+010000 到 U +10FFFF)。

于是就有一个问题,当咱们遇到两个字节,怎么看出它自身是一个字符,还是须要跟其余两个字节放在一起解读?

后面在 Unicode 局部说到,在根本立体内,从 U+D800 到 U+DFFF 是一个空段,即这些码点不对应任何字符。因而,这个空段能够用来映射辅助立体的字符。

具体来说,辅助立体的字符位共有 220 个,也就是说,对应这些字符至多须要 20 个二进制位。UTF-16 将这 20 位拆成两半,前 10 位映射在 U+D800 到 U+DBFF(空间大小 210),称为高位(H),后 10 位映射在 U+DC00 到 U+DFFF(空间大小 210),称为低位(L)。这意味着,一个辅助立体的字符,被拆成两个根本立体的字符示意。

所以,在 UTF-16 编码下,当咱们遇到两个字节,发现它的码点在 U+D800 到 U+DBFF 之间,就能够判定,紧跟在前面的两个字节的码点,应该在 U+DC00 到 U+DFFF 之间,这四个字节必须放在一起解读。

什么是字节序

先看字节序的定义,征引维基百科

Endianness is the sequential order in which bytes are arranged into larger numerical values when stored in memory or when transmitted over digital links.

简略来说,字节序就是字节之间的程序,当传输或者存储时,如果 数字超过 1 个字节,须要指定字节间的程序。字节序用英语说就是 byte order mark,简称BOM

字节序问题仅存在于某种编码下计算机一次读取字符大小大于一个字节的时候。

字节序个别分为大端字节序或小端字节序,两种字节序的独特存在齐全是历史起因。采纳什么程序更多的是出于数值解决上的考量。对于数值的不同操作不同的字节序性能也不同,当然如果数值大小不超过一个字节也就不须要放心什么程序了。

大端程序是网络协议中的次要程序,例如在 Internet 协定套件中,它被称为 网络程序,先传输最高无效字节。相同,小字节序是处理器体系结构(x86,大多数 ARM 实现,根本 RISC-V 实现)及其关联内存的次要排序形式。

文件格式则能够应用任何一种程序:有些格局将两者混合应用。那对文件系统而言计算机怎么晓得某一个文件到底采纳哪一种形式编码?

Unicode 标准定义,每一个文件的最后面别离退出一个示意编码程序的字符,这个字符的名字叫做 ” 零宽度非换行空格 ”(zero width no-break space)。

如果一个文本文件的头两个字节是FE FF,就示意该文件采纳大端形式;如果头两个字节是FF FE,就示意该文件采纳小端形式。

UTF 的字节序和 BOM

援用至 How to teach endian 的一段话:

One of the major disciplines in computer science is parsing/formatting. This is the process of converting the external format of data (file formats, network protocols, hardware registers) into the internal format (the data structures that software operates on).

An external format must be well-defined. What the first byte means must be written down somewhere, then what the second byte means, and so on. For Internet protocols, these formats are written in RFCs, such as RFC 791 for the “Internet Protocol”. For file formats, these are written in documents, such as those describing GIF files, JPEG files, MPEG files, and so forth.

翻译过去就是:

解析 / 格式化是计算机科学的次要学科之一。这是将数据的内部格局(文件格式,网络协议,硬件寄存器)转换为外部格局(软件所操作的数据结构)的过程。

内部格局必须定义明确。必须将第一个字节的含意写在某个中央,而后将第二个字节的含意写下,依此类推。对于 Internet 协定,这些格局以 RFC 编写,例如“Internet 协定”的 RFC 791。对于文件格式,这些格局写在文档中,例如形容 GIF 文件,JPEG 文件,MPEG 文件等的文档。

Unicode 标准中举荐的标记字节程序的办法是 BOM。BOM 不是“Bill Of Material”的 BOM 表,而是 Byte Order Mark

在 UCS 编码中有一个叫做 “ZERO WIDTH NO-BREAK SPACE” 的字符,它的编码是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不应该呈现在理论传输中。

UCS 标准倡议咱们在传输字节流前,先传输字符 “ZERO WIDTH NO-BREAK SPACE”。

这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到 FFFE,就表明这个字节流是 Little-Endian 的。因而字符 “ZERO WIDTH NO-BREAK SPACE”又被称作 BOM

UTF-8 不须要 BOM 来表明字节程序,但能够用 BOM 来表明编码方式。字符 “ZERO WIDTH NO-BREAK SPACE”的 UTF-8 编码是 EF BB BF 所以如果接收者收到以 EF BB BF 结尾的字节流,就晓得这是 UTF-8 编码了。

举例如下(这里假如每个内存地址保留一个字节数据):

字节格局 文本内容 16 进制 占用内存大小 内存地址
UTF-8 1 31 1 byte 01
UTF-8 带 BOM 1 EF BB BF 31 4 byte 01~04

如上表所示:如果咱们单纯保留一个内容为“1”(Unicode 编码为 0x31)的一个文本数据,抉择带不带 BOM 保留的内容是不统一的,针对第一种咱们明确的应用了 UTF-8 的编码进行存储,如果须要从新加载这个文本数据,将数据从内存(或指定存储构造)加载进去(这里只有一个字节,文件大小文件地址等在文件元信息能够获取),如何展现这个加载数据取决于咱们抉择什么编码方式,因为咱们是应用特定的格局(UTF-8)写入,所以咱们须要指明应用特定的格局(UTF-8)去读取能力正确读取出文本“1”,否则如果咱们抉择间接展现 16 进制数据的话失去的内容便是 31。

当初大部分数据加载工具都会设定默认的编码方式,譬如文本工具等根本默认编码方式都是 UTF-8。那为了让某些未设置默认读取形式的数据加载工具能正确辨认数据编码,便须要咱们在写入数据时优先写入 BOM,如上表 文本 1 带上 BOM 后写入内容将多占用 3 个字节。有了这 3 个字节的 BOM 数据加载不便分明接下来应用 UTF-8 去解析内容。

字节格局 文本内容 16 进制 占用内存大小 内存地址
UTF-8 E6 88 91 3 byte 01~03
UTF-8 带 BOM EF BB BF E6 88 91 6 byte 01~06

中文“我”的 Unicode 编码为 0x6211,二进制为 0110 0010 0001 0001 依据前文的 Unicode UTF -8 编码规定得出“我”的 UTF-8

属于范畴 0000 0800 - 0000 FFFF,替换模板为 1110xxxx 10xxxxxx 10xxxxxx 带入模板后得出二进制为: 11100110 10001000 10010001 转换成 16 进制便是 E6 88 91。

如果是应用 UTF-16 编码:

UTF-16 的编码长度要么是 2 个字节(U+0000 到 U+FFFF),要么是 4 个字节(U+010000 到 U+10FFFF)。

字节格局 文本内容 16 进制 占用内存大小 内存地址
UTF-16 LE 11 62 2 byte 01~02
UTF-16 LE 带 BOM FF FE 11 62 4 byte 01~04
UTF-16 BE 62 11 2 byte 01~02
UTF-16 BE 带 BOM FE FF 62 11 4 byte 01~04

中文“我”的 Unicode 编码为 6211,UTF-16 没有非凡的转换规则,每次读取或写入数据必须是 2 个字节,刚刚我字占用 2 个字节。

如上表所示,如果采纳大端字节排序的形式(UTF-16 BE)存储数据在内存中的示意是与人类浏览的形式统一的,如果是小端字节序的形式存储则直观看起来有点反人类。

主机字节序

网络字节序与主机字节序是常常导致混同的两个概念,网络字节序是确定的,而主机字节序的多样性往往是混同的起因。

根本 x86 系列 CPU 都是 little-endian 的字节序。

举例说明:

假如每个内存地址单位存一个字节

例子:在内存中双字 0x01020304(DWORD) 的存储形式

内存地址 4000 4001 4002 4003
LE 小端 04 03 02 01
BE 大端 01 02 03 04

或则:

内存地址 LE 小端 BE 大端
4000 04 01
4001 03 02
4002 02 03
4003 01 04

例子:如果咱们将 0x1234abcd 写入到以 0x0000 开始的内存中,则后果为

内存地址 0x0000 0x0001 0x0002 0x0003
LE 小端 0xcd 0xab 0x34 0x12
BE 大端 0x12 0x34 0xab 0xcd

或则:

内存地址 LE 小端 BE 大端
0x0000 0xcd 0x12
0x0001 0xab 0x34
0x0002 0x34 0xab
0x0003 0x12 0xcd

根本是:

  • 字节角度:字节高位在内存高位代表的是小端字节序,相同字节高位在内存低位便是大端字节序;
  • 内存角度:内存低位在字节低位便是小端字节序,相同内存低位放字节高位代表的是大端字节序;
  • 总结:字节高位放内存高位或字节低位放内存低位则是小端字节序,否则就是大端字节序。

失常状况下咱们都无需去关怀主机字节序,因为如何存储是内部存储器或则说使驱动须要关怀的,咱们只须要失常写入数据和读取数据即可,其余的字节序的解决无需咱们去关怀,咱们更多须要关怀的应该使网络字节序

网络字节序

网络 字节程序 是 TCP/IP 协定中规定好的一种数据表示格局,它与具体的 CPU 类型、操作系统 等无关,从而能够保证数据在不同主机之间传输时可能被正确解释。网络字节程序采纳 big endian(大端)排序形式。

因为网络协议中默认应用的是大端字节序,大家都恪守这个规定,自然而然的大家间接用大端字节序去解析网络数据便能够的到相应的信息,便不须要手动去申明这个数据包是大端字节序的。当然前提是你发送进来的数据也是大端字节序的(如果你发送进来的数据是小端字节序编码的天然收取方也得被动用小端的去解析)。

文件字节序

除了主机字节序以及网络字节序,还有一种便是咱们在保留文件的时候被动申明应用的字节序。

譬如咱们在保留一个文本文件的时候咱们能够设置其保留格局为:UTF-8 / UTF-8 带 BOM / UTF-16 LE / UTF-16 LE 带 BOM / UTF-16 BE / UTF-16 BE 带 BOM / UTF-32 LE / UTF-32 LE 带 BOM / UTF-32 BE / UTF-32 BE 带 BOM / UCS….

什么时候须要关怀字节序

应用底层语言譬如 C 语言之类的,咱们须要手动将读取到的内存转换为指定的数值类型,这个时候就须要晓得具体内存的字节序,譬如如果是大端则几个字节拿进去间接拼在一起能够作为数值应用,否则是小端的话得坐相应的解决能力失去最终的值。高级语言个别不须要咱们间接操作内存,运行环境间接帮咱们做好解决。

个别开发的时候申明的变量,如果是数值类型,在运行时,运行环境会主动帮咱们解决好数值在内存中的体现,无需适度关怀,数值在内存中既有可能大端字节序存储也有可能是小端字节序存储,取决于零碎的须要。如果是字符类型也同理,运行环境曾经会主动帮咱们解决好,申明时是什么值应用的时候便是什么值,无需关怀在内存中的体现。

跨主机即联网的时候须要确认发送进来的数据的字节序,接管方须要应用雷同的字节序去解析,TCP/IP 协定规定个别应用大端字节序。

Hashbang 正文

Hashbang 正文 是一种专门正文语法

对于 JavaScript 而言,Hashbang 正文正在 ECMAScript 中标准化(参见 Hashbang 语法倡议[https://github.com/tc39/propo…])。

Hashbang 正文的行为与单行(//)正文完全相同,但它以 #! 结尾且仅在脚本或模块的相对结尾无效。还要留神,在 #! 之前不容许有任何类型的空格。

正文由 #! 之后的所有字符组成直到第一行的开端;只容许有一条这样的正文。Hashbang 正文指定特定 JavaScript 解释器的门路要用于执行脚本。示例如下:

#!/usr/bin/env node
console.log("Hello world");

留神:JavaScript 中的 Hashbang 正文模拟 Unix 中的 Shebangs,用于指定适当的解释器运行文件。

只管在 Hashbang 正文之前的 BOM 在浏览器中能工作,但不倡议在具备 Hashbang 的脚本中应用 BOM。当您尝试在 Unix/Linux 中运行脚本时,有 BOM 将不工作。因而,如果要间接从 shell 运行脚本,请应用没有 BOM 的 UTF-8。您只能应用 #! 正文款式以指定 JavaScript 解释器。在所有其余状况下,只需应用 // 正文(或多行正文)。

在 JavaScript 中应用 Unicode

十六进制

> 0x00A9 // 这是一个 16 进制数字
169  // 间接执行默认输入为 10 进制

十六进制示意一个转义序列

> '\xA9' // 一个字符通过 16 进制示意,或则说这里两个 16 进制所代表的字符通过 '\x' 本义示意 , 最多反对两个 16 进制
"©"
> '\xA9' === String.fromCodePoint(0xA9)
true

Unicode 转义序列要求在 \\u 之后至多有四个字符(4 个 16 进制,代表两个字节)

> '\u00A9' // \u 前面接 4 个 16 进制数示意一个字符本义
"©"

Unicode 编码本义是 ECMAScript 6 新增个性。应用 Unicode 编码本义,任何字符都能够被本义为十六进制编码。最高能够用到 0x10FFFF。

应用单纯的 Unicode 本义通常须要写成离开的两半以达到雷同的成果。能够参考 String.fromCodePoint() String.prototype.codePointAt()

'\u{2F804}' // 对于某些字符超出两个字节示意的就得能够用 \u{} 包起对应的若干个 16 进制,不能超过 10FFFF

// 应用单纯 Unicode 本义
'\uD87E\uDC04' // 应用两个 UTF-16 单元凑成一个 4 字节的字符码点

不同字节字符示意形式

'\xA9'             // 反对一个字节示意字符
'\u00A9'         // 反对两个字节示意字符
'\u{2F804}'        // 反对两个以上字节示意字符

两个\\x 示意的字符无奈拼接成一个双字节的字符

> '\u01ff' // 双字节字符
"ǿ"

> '\x01\xff' // \x01 是不可打印字符,相当于两个字符串拼接
"ÿ"

两个 \\u 示意的字符能够拼接成一个四字节的字符

// "????" 在 UTF-16 是一个 4 字节字符 码点是 20bb7
> "????".charCodeAt(0) // 获取后面两个字节的 10 进制
55362
> "????".charCodeAt(1) // 获取前面两个字节的 10 进制
57271

> (55362).toString(16)  // 获取对应的 16 进制
"d842"
> (57271).toString(16)    // 获取对应的 16 进制
"dfb7"

> '\ud842\udfb7'
"????"

> "????".codePointAt(0) // 获取残缺字符的 10 进制
134071

(134071).toString(16) // 获取对应的 16 进制
"20bb7"

相干 API:

  • str.charCodeAt
  • str.codePointAt
  • str.charAt
  • String.fromCodePoint()
  • String.fromCharCode

JavaScript 共有 6 种办法能够示意一个字符:

'\z' === 'z'  // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true

更多 ES-6 对 Unicode 的反对细节:

  • ES6 – 字符的 Unicode 表示法
  • String.fromCodePoint()

ASCII 码表参考

Bin(二进制) Oct(八进制) Dec(十进制) Hex(十六进制) 缩写 / 字符 解释
0000 0000 00 0 0x00 NUL(null) 空字符
0000 0001 01 1 0x01 SOH(start of headline) 题目开始
0000 0010 02 2 0x02 STX (start of text) 注释开始
0000 0011 03 3 0x03 ETX (end of text) 注释完结
0000 0100 04 4 0x04 EOT (end of transmission) 传输完结
0000 0101 05 5 0x05 ENQ (enquiry) 申请
0000 0110 06 6 0x06 ACK (acknowledge) 收到告诉
0000 0111 07 7 0x07 BEL (bell) 响铃
0000 1000 010 8 0x08 BS (backspace) 退格
0000 1001 011 9 0x09 HT (horizontal tab) 程度制表符
0000 1010 012 10 0x0A LF (NL line feed, new line) 换行键
0000 1011 013 11 0x0B VT (vertical tab) 垂直制表符
0000 1100 014 12 0x0C FF (NP form feed, new page) 换页键
0000 1101 015 13 0x0D CR (carriage return) 回车键
0000 1110 016 14 0x0E SO (shift out) 不必切换
0000 1111 017 15 0x0F SI (shift in) 启用切换
0001 0000 020 16 0x10 DLE (data link escape) 数据链路本义
0001 0001 021 17 0x11 DC1 (device control 1) 设施管制 1
0001 0010 022 18 0x12 DC2 (device control 2) 设施管制 2
0001 0011 023 19 0x13 DC3 (device control 3) 设施管制 3
0001 0100 024 20 0x14 DC4 (device control 4) 设施管制 4
0001 0101 025 21 0x15 NAK (negative acknowledge) 回绝接管
0001 0110 026 22 0x16 SYN (synchronous idle) 同步闲暇
0001 0111 027 23 0x17 ETB (end of trans. block) 完结传输块
0001 1000 030 24 0x18 CAN (cancel) 勾销
0001 1001 031 25 0x19 EM (end of medium) 媒介完结
0001 1010 032 26 0x1A SUB (substitute) 代替
0001 1011 033 27 0x1B ESC (escape) 换码(溢出)
0001 1100 034 28 0x1C FS (file separator) 文件分隔符
0001 1101 035 29 0x1D GS (group separator) 分组符
0001 1110 036 30 0x1E RS (record separator) 记录分隔符
0001 1111 037 31 0x1F US (unit separator) 单元分隔符
0010 0000 040 32 0x20 (space) 空格
0010 0001 041 33 0x21 ! 叹号
0010 0010 042 34 0x22 双引号
0010 0011 043 35 0x23 # 井号
0010 0100 044 36 0x24 $ 美元符
0010 0101 045 37 0x25 % 百分号
0010 0110 046 38 0x26 & 和号
0010 0111 047 39 0x27 闭单引号
0010 1000 050 40 0x28 ( 开括号
0010 1001 051 41 0x29 ) 闭括号
0010 1010 052 42 0x2A * 星号
0010 1011 053 43 0x2B + 加号
0010 1100 054 44 0x2C , 逗号
0010 1101 055 45 0x2D 减号 / 破折号
0010 1110 056 46 0x2E . 句号
0010 1111 057 47 0x2F / 斜杠
0011 0000 060 48 0x30 0 字符 0
0011 0001 061 49 0x31 1 字符 1
0011 0010 062 50 0x32 2 字符 2
0011 0011 063 51 0x33 3 字符 3
0011 0100 064 52 0x34 4 字符 4
0011 0101 065 53 0x35 5 字符 5
0011 0110 066 54 0x36 6 字符 6
0011 0111 067 55 0x37 7 字符 7
0011 1000 070 56 0x38 8 字符 8
0011 1001 071 57 0x39 9 字符 9
0011 1010 072 58 0x3A : 冒号
0011 1011 073 59 0x3B ; 分号
0011 1100 074 60 0x3C < 小于
0011 1101 075 61 0x3D = 等号
0011 1110 076 62 0x3E > 大于
0011 1111 077 63 0x3F ? 问号
0100 0000 0100 64 0x40 @ 电子邮件符号
0100 0001 0101 65 0x41 A 大写字母 A
0100 0010 0102 66 0x42 B 大写字母 B
0100 0011 0103 67 0x43 C 大写字母 C
0100 0100 0104 68 0x44 D 大写字母 D
0100 0101 0105 69 0x45 E 大写字母 E
0100 0110 0106 70 0x46 F 大写字母 F
0100 0111 0107 71 0x47 G 大写字母 G
0100 1000 0110 72 0x48 H 大写字母 H
0100 1001 0111 73 0x49 I 大写字母 I
01001010 0112 74 0x4A J 大写字母 J
0100 1011 0113 75 0x4B K 大写字母 K
0100 1100 0114 76 0x4C L 大写字母 L
0100 1101 0115 77 0x4D M 大写字母 M
0100 1110 0116 78 0x4E N 大写字母 N
0100 1111 0117 79 0x4F O 大写字母 O
0101 0000 0120 80 0x50 P 大写字母 P
0101 0001 0121 81 0x51 Q 大写字母 Q
0101 0010 0122 82 0x52 R 大写字母 R
0101 0011 0123 83 0x53 S 大写字母 S
0101 0100 0124 84 0x54 T 大写字母 T
0101 0101 0125 85 0x55 U 大写字母 U
0101 0110 0126 86 0x56 V 大写字母 V
0101 0111 0127 87 0x57 W 大写字母 W
0101 1000 0130 88 0x58 X 大写字母 X
0101 1001 0131 89 0x59 Y 大写字母 Y
0101 1010 0132 90 0x5A Z 大写字母 Z
0101 1011 0133 91 0x5B [ 开方括号
0101 1100 0134 92 0x5C \ 反斜杠
0101 1101 0135 93 0x5D ] 闭方括号
0101 1110 0136 94 0x5E ^ 脱字符
0101 1111 0137 95 0x5F _ 下划线
0110 0000 0140 96 0x60 ` 开单引号
0110 0001 0141 97 0x61 a 小写字母 a
0110 0010 0142 98 0x62 b 小写字母 b
0110 0011 0143 99 0x63 c 小写字母 c
0110 0100 0144 100 0x64 d 小写字母 d
0110 0101 0145 101 0x65 e 小写字母 e
0110 0110 0146 102 0x66 f 小写字母 f
0110 0111 0147 103 0x67 g 小写字母 g
0110 1000 0150 104 0x68 h 小写字母 h
0110 1001 0151 105 0x69 i 小写字母 i
0110 1010 0152 106 0x6A j 小写字母 j
0110 1011 0153 107 0x6B k 小写字母 k
0110 1100 0154 108 0x6C l 小写字母 l
0110 1101 0155 109 0x6D m 小写字母 m
0110 1110 0156 110 0x6E n 小写字母 n
0110 1111 0157 111 0x6F o 小写字母 o
0111 0000 0160 112 0x70 p 小写字母 p
0111 0001 0161 113 0x71 q 小写字母 q
0111 0010 0162 114 0x72 r 小写字母 r
0111 0011 0163 115 0x73 s 小写字母 s
0111 0100 0164 116 0x74 t 小写字母 t
0111 0101 0165 117 0x75 u 小写字母 u
0111 0110 0166 118 0x76 v 小写字母 v
0111 0111 0167 119 0x77 w 小写字母 w
0111 1000 0170 120 0x78 x 小写字母 x
0111 1001 0171 121 0x79 y 小写字母 y
0111 1010 0172 122 0x7A z 小写字母 z
0111 1011 0173 123 0x7B { 开花括号
0111 1100 0174 124 0x7C \ 垂线
0111 1101 0175 125 0x7D } 闭花括号
0111 1110 0176 126 0x7E ~ 波浪号
0111 1111 0177 127 0x7F DEL (delete) 删除

补充:

  • 字体编辑用中日韩汉字 Unicode 编码表
正文完
 0