最基础的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、其他字符以及美式英语中使用的椰树控制字符。
标准表
十进制 | 缩写/字符 | 说明 |
---|---|---|
0 | NUL(null) | 空字符 |
1 | SOH(start of headline) | 标题开始 |
2 | STX (start of text) | 正文开始 |
3 | ETX (end of text) | 正文结束 |
4 | EOT (end of transmission) | 传输结束 |
5 | ENQ (enquiry) | 请求 |
6 | ACK (acknowledge) | 收到通知 |
7 | BEL (bell) | 响铃 |
8 | BS (backspace) | 退格 |
9 | HT (horizontal tab) | 水平制表符 |
10 | LF (NL line feed, new line) | 换行键 |
11 | VT (vertical tab) | 垂直制表符 |
12 | FF (NP form feed, new page) | 换页键 |
13 | CR (carriage return) | 回车键 |
14 | SO (shift out) | 不用切换 |
15 | SI (shift in) | 启用切换 |
16 | DLE (data link escape) | 数据链路转义 |
17 | DC1 (device control 1) | 设备控制1 |
18 | DC2 (device control 2) | 设备控制2 |
19 | DC3 (device control 3) | 设备控制3 |
20 | DC3 (device control 4) | 设备控制4 |
21 | NAK(negative acknowledge) | 拒绝接受 |
22 | SYN(synchronous idle) | 同步空闲 |
23 | ETB (end of trans. block) | 结束传输块 |
24 | CAN (cancel) | 取消 |
25 | EM (end of medium) | 媒介结束 |
26 | SUB (substitute) | 代替 |
27 | ESC (escape) | 换码(溢出) |
28 | FS (file separator) | 文件分隔符 |
29 | GS (group separator) | 分组符 |
30 | RS (record separator) | 记录分隔符 |
31 | US (unit separator) | 单元分隔符 |
32 | (space) | 空格 |
33 | ! | 叹号 |
34 | " | 双引号 |
35 | # | 井号 |
36 | $ | 美元符 |
37 | % | 百分号 |
38 | & | 和号 |
39 | ’ | 闭单引号 |
40 | ( | 开括号 |
41 | ) | 闭括号 |
42 | * | 星号 |
43 | + | 加号 |
44 | , | 逗号 |
45 | - | 减号/破折号 |
46 | . | 句号 |
47 | / | 斜杆 |
48 | 0 | 字符0 |
49 | 1 | 字符1 |
50 | 2 | 字符2 |
51 | 3 | 字符3 |
52 | 4 | 字符4 |
53 | 5 | 字符5 |
54 | 6 | 字符6 |
55 | 7 | 字符7 |
56 | 8 | 字符8 |
57 | 9 | 字符9 |
58 | : | 冒号 |
59 | ; | 分号 |
60 | < | 小于 |
61 | = | 等于 |
62 | > | 大于 |
63 | ? | 问号 |
64 | @ | 电子邮件符号 |
65 | A | 大写字母A |
66 | B | 大写字母B |
67 | C | 大写字母C |
68 | D | 大写字母D |
69 | E | 大写字母E |
70 | F | 大写字母F |
71 | G | 大写字母G |
72 | H | 大写字母H |
73 | I | 大写字母I |
74 | J | 大写字母J |
75 | K | 大写字母K |
76 | L | 大写字母L |
77 | M | 大写字母M |
78 | N | 大写字母N |
79 | O | 大写字母O |
80 | P | 大写字母P |
81 | Q | 大写字母Q |
82 | R | 大写字母R |
83 | S | 大写字母S |
84 | T | 大写字母T |
85 | U | 大写字母U |
86 | V | 大写字母V |
87 | W | 大写字母W |
88 | X | 大写字母X |
89 | Y | 大写字母Y |
90 | Z | 大写字母Z |
91 | [ | 开括号 |
92 | \\ | 反斜杠 |
93 | ] | 闭开括号 |
94 | ^ | 脱字符 |
95 | _ | 下划线 |
96 | ` | 开单引号 |
97 | a | 小写字母a |
98 | b | 小写字母b |
99 | c | 小写字母c |
100 | d | 小写字母d |
101 | e | 小写字母e |
102 | f | 小写字母f |
103 | g | 小写字母g |
104 | h | 小写字母h |
105 | i | 小写字母i |
106 | j | 小写字母j |
107 | k | 小写字母k |
108 | l | 小写字母i |
109 | m | 小写字母m |
110 | n | 小写字母n |
111 | o | 小写字母o |
112 | p | 小写字母p |
113 | q | 小写字母q |
114 | r | 小写字母r |
115 | s | 小写字母s |
116 | t | 小写字母t |
117 | u | 小写字母u |
118 | v | 小写字母v |
119 | w | 小写字母w |
120 | x | 小写字母x |
121 | y | 小写字母y |
122 | z | 小写字母z |
123 | { | 开花括号 |
124 | ||
125 | } | 闭花括号 |
126 | ~ | 波浪号 |
127 | DEL (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 |
总结
对比
编码 | 大小 | 支持语言 |
---|---|---|
ASCII | 1个字节 | 英文 |
Unicode | 2个字节(生僻字4个字节) | 所有语言 |
UTF-8 | 1-6个字节,英文1个字节、汉子3个字节、生僻字4-6个字节 | 所有语言 |
计算机系统通用的字符编码方式
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码
场景一:
用记事本编辑文本时,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件中。
场景二:
浏览网页时,服务会把动态生成的Unicode内容转换为UTF-8再传输给浏览器。
以上是关于最基础的ASCIIUnicodeUTF-8一起来多了解点的主要内容,如果未能解决你的问题,请参考以下文章