字符编码基础知识-2023年个人用心_第1页
字符编码基础知识-2023年个人用心_第2页
字符编码基础知识-2023年个人用心_第3页
字符编码基础知识-2023年个人用心_第4页
字符编码基础知识-2023年个人用心_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。

一、ASCII码

我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有。和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为

一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括

32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。

二、非ASCII编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些

欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的e的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体

系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表

了e,在希伯来语编码中却代表了字母Gimel(Ji),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,

不一样的只是128-255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,

简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。

中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无

关系的。

三.Unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用

错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名

字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英

语的大写字母A,U+4E25表示汉字严。具体的符号对应表,可以查询Unicode,org,或者专门的汉字对应表。

四、Unicode的问题

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字严的Unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。

表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别Unicode和ASCH?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问

题是,我们已经知道,英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个

字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode。2)Unicode在很长一段时间内无法

推广,直到互联网的出现。

五、UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字

节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用广4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个

符号的Unicode码。

下表总结了编码规则,字母X表示可用编码的位:

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

00000000-0000007FOxxxxxxx

00000080-000007FF1lOxxxxxlOxxxxxx

00000800-0000FFFFlllOxxxxlOxxxxxxlOxxxxxx

00010000-0010FFFF111lOxxxlOxxxxxxlOxxxxxxlOxxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是L则连续有多少个1,就表示当前字符占用

多少个字节。

下面,还是以汉字严为例,演示如何实现UTF-8编码:

严的Unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(00000800-0000FFFF),因此严的UTF-8

编码需要三个字节,即格式是lllOxxxxlOxxxxxx10xxxxxxo然后,从严的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。

这样就得到了,严的UTF-8编码是111001001011100010100101,转换成十六进制就是E4B8A5。

六、Unicode与UTF-8之间的转换

通过上一节的例子,可以看到严的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。

Windows平台,有一个最简单的转化方法,就是使用内置的记事本小程序notepad.exe。打开文件后,点击文件菜单中的另存为命令,会跳出一个对话

框,在最底部有一个编码的下拉条:

J另存为X

e▼个口>此%32>Per(E:)>SVN>502_>03_Software>vO制塞"03Software*P

组织▼新建文件夹已▼❷

,下载八名称人修改日期英曳大小

小日乐9Web2018/6/2615:13文件夹

■桌面

JWindows10(C

・App(D:)

一Per(E:)

・Co(F:)

_Backup(G:)

.CD驱动SS(H:)

.ShareC\\192.1(

【nfs(\\192.168.-

Nnfs(\\172.16.1;

“网ig

文件名皎

A^@,NSI.||喃

____________________________________________________________________________________________ANSI—1___________________________

Unicode

Unicodebigendian

|uTF-8

里面有四个选项:ANSI,Unicode,Unicodebigendian和UTF-8。

DANSI是默认的编码方式。对于英文文件是ASCH编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。

2)Unicode编码这里指的是notepad,exe使用的UCS-2编码方式,即直接用两个字节存入字符的Unicode码,这个选项用的littleendian格式。

3)Unicodebigendian编码与上一个选项相对应。我在下一节会解释littleendian和bigendian的涵义。

4)UTF-8编码,也就是上一节谈到的编码方法。

选择完"编码方式"后,点击"保存"按钮,文件的编码方式就立刻转换好了。

七、Littleendian和Bigendian

上一节已经提到,UCS-2格式可以存储Unicode码(码点不超过OxFFFF)。以汉字严为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,

另一个字节是25。存储的时候,4E在前,25在后,这就是Bigendian方式;25在前,4E在后,这是Littleendian方式。

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-endian)敲开

还是从小头(Little-endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

第一个字节在前,就是"大头方式"(Bigendian),第二个字节在前就是"小头方式"(Littleendian)o

那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?

Unicode规范定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(zerowidthno-breakspace),用FEFF

表示。这正好是两个字节,而且FF比FE大L

如果一个文本文件的头两个字节是FEFF,就表示该文件采用大头方式;如果头两个字节是FFFE,就表示该文件采用小头方式。

八、实例

下面,举一个实例。

打开"记事本"程序notepad,exe,新建一个文本文件,内容就是一个严字,依次采用ANSI,Unicode,Unicodebigendian和UTF—8编

码方式保存。

然后,用文本编辑软件UltraEdit中的"十六进制功能",观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节DICF,这正是严的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节FFFE254E,其中FFFE表明是小头方式存储,真正的编码是4E25。

3)Unicodebigendian:编码是四个字节FEFF4E25,其中FEFF表明是大头方式存储。

4)UTF-8:编码是六个字节EFBBBFE4B8A5,前三个字节EFBBBF表示这是UTF-8编码,后三个E4B8A5就是严的具体编码,它的存储顺序与编码顺序是

一致的。

1、ASCII(AmericanStandardCodeforInformationInterchange,美国信息互换标准代码,ASCII)是基于拉丁字母的一套

电脑编码系统,它主要用于显示现代英语和其他西欧语言.它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC646.

2、ASCII码是一个7位的编码,且该编码是唯一的一个字符.在这个页面,你可以找到8位的256个字符,ASCH码表和

Windows-1252(codepage1252,它是国际标准ISO8859T的一个扩展字符集)标准保持一致;

3、ASCII码是AmericanStandardCodeforInformationInterchange的缩写,而不是ASCII(罗马数字2),有很多人在

这个地方产生误解;

4、ASCH码规范于1967年第一次发布,最后一次更新是在1986年,它包含了33个控制字符(具有某些特殊功能但是无法显

示的字符)和95个可显示字符;

5、通过下面的ASCII码对照表,可以查询出十进制(DEC)、八进制(OCT)、十六进制(HEX)、二进制(BIN)和符号之间的关

系;

6、Ctrl+D(收藏本网页),Ctrl+S(保存本网页到电脑);

ASCII控制字符(字符编码:。-31)

在ASCII码表中,前32个字符是不能用于打印控制的编码,而是用于控制像打印机一样的外围设备。

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

00000000000000NUL�;空字符

10010100000001SOH;标题开始

20020200000010STX;正文开始

30030300000011ETX;正文结束

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

40040400000100EOT;传输结束

50050500000101ENQ;询问

60060600000110ACK;收到通知

70070700000111BEL;铃

80100800001000BS;退格

9Oil0900001001HT ;.水平制表符

10012OA00001010LF ;换行键

11013OB00001011VT垂直制表符

12014OC00001100FF ;换页键

13015OD00001101CR ;回车键

14016OE00001110SO;移出

15017OF00001111SI;移入

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

160201000010000DLE;数据链路转义

170211100010001DC1;设备控制1

180221200010010DC2;设备控制2

190231300010011DC3;设备控制3

200241400010100DC4;设备控制4

210251500010101NAK;拒绝接收

220261600010110SYN;同步空闲

230271700010111ETB;传输块结束

240301800011000CAN;取消

250311900011001EM;介质中断

260321A00011010SUB;替换

27033IB00011011ESC;换码符

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

280341C00011100FS;文件分隔符

29035ID00011101GS;组分隔符

30036IE00011110RS;记录分离符

31037IF00011111US;单元、分隔符

ASCII打印字符(字符编码:32-127)

32〜126(共95个)是字符:32是空格,其中48〜57为0到9十个阿拉伯数字,65〜90为26个大写英文字母,97〜122号为

26个小写英文字母,其余为一些标点符号、运算符号等。第127个字符表示的是键盘上的删除命令。

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

320402000100000 ;空格

330412100100001!!;感嚷号

340422200100010";

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

350432300100011##;井号

360442400100100$$;美元符

370452500100101%%;百分号

380462600100110&&;与

390472700100111';单引号

400502800101000((;左括号

410512900101001));右括号

420522A00101010**;星号

430532B00101011++;加号

440542C00101100,;逗号

450552D00101101—-;连字号或减号

460562E00101110•.;句点或小数点

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

470572F00101111//;斜杠

48060300011000000;0

49061310011000111;1

50062320011001022;2

51063330011001133;3

52064340011010044;4

53065350011010155;5

54066360011011066;6

55067370011011177;7

56070380011100088;8

57071390011100199;9

580723A00111010♦:;冒号

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

590733B001110119;;分号

600743C00111100<<;小于

610753D00111101—=;等号

620763E00111110>>;大于

630773F00111111??;问号

641004001000000@@;电子邮件符号

651014101000001AA;大写字母A

661024201000010BB;大写字母B

671034301000011CC;大写字母C

681044401000100DD;大写字母D

691054501000101EE;大写字母E

701064601000110FF;大哥f年F

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

711074701000111GG;大写字等G

721104801001000HH;大写字母H

731114901001001II;大写字母I

741124A01001010JJ;大写字母J

751134B01001011KK;大写字母K

761144C01001100LL;大写字母L

771154D01001101MM;大写字母M

781164E01001110NN;大写字母N

791174F010011110O;大写字母0

801205001010000PP;大写字母P

811215101010001QQ;大写字母Q

821225201010010RR;大哥f年R

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

831235301010011SS;大写字等

841245401010100TT;大写字母T

851255501010101UU;大写字母U

861265601010110VV;大写字母V

871275701010111wW大写字母W

881305801011000XX;大写字母X

891315901011001YY;大写字母Y

901325A01011010ZZ;大写字母z

911335B01011011[[;左中括号

921345C01011100\\;反斜杠

931355D01011101]];右甲插号

941365E01011110^;音调符号

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

下则线

951375F01011111—_;

961406001100000、`;重音符

971416101100001aa;小写字母a

981426201100010bb;小写字母b

991436301100011cc;小写字母c

1001446401100100dd;小写字母d

1011456501100101ee;小写字母e

1021466601100110ff;小写字母f

1031476701100111gg;小写字母g

1041506801101000hh;小写字母h

1051516901101001ii;小号靠谭i

1061526A01101010jj;小写字母j

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

1071536B01101011kk;小写字等鳖

1081546C011011001l;小写字母1

1091556D01101101mm;小写字母m

1101566E01101110n小写字母n

1111576F011011110小写字母。

1121607001110000pp;小写字母p

1131617101110001qq;小写字母q

1141627201110010r小写字母r

1151637301110011ss;小写字母s

1161647401110100tt;小写字母t

1171657501110101u小写字谭u

1181667601110110Vv;小*■V

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

1191677701110111Ww;小写字等r

1201707801111000Xx;小写字母x

1211717901111001yy;小写字母y

1221727A01111010zz;小写字母z

1231737B01111011{{;左大括号

1241747C011111001|;垂直线

1251757D01111101}};右大括号

1261767E01111110z~;波浪号

1271777F01111111;删除

ASCII扩展码(字符编码:128-255)

后128个称为扩展ASCH码。许多基于x86的系统都支持使用扩展(或“高”)ASCH。扩展ASCII码允许将每个字符的第8位

用于确定附加的128个特殊符号字符、外来语字母和图形符号。

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

1282008010000000€€;欧盟符号

1292018110000001

13020282100000109‚;单低9引号

1312038310000011ƒ;带钩的

拉丁小写字母f

1322048410000100„;双低9引号

1332058510000101•••…;水平省略号

1342068610000110t†;剑号

1352078710000111i‡;双剑号

A

1362108810001000ˆ;修正字符

抑扬音符号

1372118910001001%0‰;千分号

十进制八进制十六进制二进制符号HTML中文解释

DECOCTHEXBINSymbol实体编码Description

1382128A10001010SŠ;带弯普'赛第

拉丁大写字母S

1392138B10001011<‹;左单书名号

1402148C10001100(EŒ;拉丁大写组合0E

1412158D10001101

1422168E10001110Z

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论