三种常见字符编码简介:ASCII、Unicode和UTF-8

本文深入浅出地介绍了字符编码的基本概念,从ASCII编码到Unicode编码的发展历程,以及为解决存储和传输效率问题而诞生的UTF-8编码。文章还详细解释了计算机系统如何在内存中使用Unicode编码,并在硬盘存储或数据传输时转换为UTF-8编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是字符编码? 

      计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295

ASCII编码:

  由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 的编码是65,小写字母 的编码是122

  但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

  全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

Unicode编码:

  因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

ASCII编码和Unicode编码的区别:

  1)ASCII编码是1个字节,而Unicode编码通常是2个字节,举例如下。

  字母 用ASCII编码是十进制的65,二进制的01000001

  字符 用ASCII编码是十进制的48,二进制的00110000,注意字符 '0' 和整数 是不同的;

  汉字 中 已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101

  如果把ASCII编码的 用Unicode编码,只需要在前面补0就可以,因此, 的Unicode编码是00000000 01000001

UTF-8编码:

  新问题的出现:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

  因此,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

字符ASCIIUnicodeUTF-8
    A0100000100000000 0100000101000001
    中        -01001110 00101101

11100100 10111000 10101101

  从上面的表格可以发现UTF-8编码一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

  谢谢清香白莲素还真的点评,强调一下,unicode是一种编码方式,和ascii是同一个概念,而UTF-8,UTF-16等是一种存储方式,在存储和传输上节约空间、提高性能的一种编码形式。

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

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

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

 

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

  

  所以很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。

最全ASCII码对照表 Bin               Dec     Hex         缩写/字符                                       解释 0000 0000     0           00             NUL (null)                                       空字符    0000 0001     1           01             SOH (start of handing)                   标题开始  0000 0010     2           02             STX (start of text)                           正文开始  0000 0011     3           03             ETX (end of text)                           正文结束 0000 0100     4           04             EOT (end of transmission)             传输结束  0000 0101     5           05             ENQ (enquiry)                               请求  0000 0110     6           06             ACK (acknowledge)                       收到通知  0000 0111     7           07             BEL (bell)                                       响铃 0000 1000     8           08             BS (backspace)                             退格  0000 1001     9           09             HT (horizontal tab)                         水平制表符  0000 1010     10         0A             LF (NL line feed, new line)             换行键  0000 1011     11         0B             VT (vertical tab)                             垂直制表符  0000 1100     12         0C             FF (NP form feed, new page)         换页键  0000 1101     13         0D             CR (carriage return)                       回车键 0000 1110     14         0E             SO (shift out)                                 不用切换  0000 1111     15         0F             SI (shift in)                                     启用切换  0001 0000     16         10             DLE (data link escape)                   数据链路转义  0001 0001     17         11             DC1 (device control 1)                   设备控制1  0001 0010     18         12             DC2 (device control 2)                   设备控制2  0001 0011     19         13             DC3 (device control 3)                   设备控制3  0001 0100     20         14             DC4 (device control 4)                   设备控制4  0001 0101     21         15             NAK (negative acknowledge)         拒绝接收  0001 0110     22         16             SYN (synchronous idle)                 同步空闲  0001 0111     23         17             ETB (end of trans. block)               传输块结束  0001 1000     24         18             CAN (cancel)                                 取消 0001 1001     25         19             EM (end of medium)                       介质中断  0001 1010     26         1A             SUB (substitute)                             替补  0001 1011     27         1B             ESC (escape)                                 溢出  0001 1100     28         1C             FS (file separator)                         文件分割符  0001 1101     29         1D             GS (group separator)                     分组符  0001 1110     30         1E             RS (record separator)                   记录分离符  0001 1111     31         1F             US (unit separator)                         单元分隔符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值