ASCII、Unicode、UTF-8

在计算机中,所有信息最终都能以二进制字符串来表示。二进制位又叫做比特(bit),每个比特有0和1两种状态,8个比特构成了1个字节(byte),1个字节可以表示256种状态。

ASCII

ASCII码一共规定了128个字符的编码,这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后7位,最前面的1位统一为0。

Unicode

Unicode是一个容纳了上百万字符的字符集,规定了每个字符的二进制代码。但是没有制定具体的存储规则,例如当用3个字节存储一个字符时,它同时可以被理解为存储了3个ASCII码,另外我们都知道ASCII码是用1个字节存储,当规定用3个字节存储字符时,就造成了空间的极大浪费。
Unicode同时也兼容了ASCII码。

UTF-8

UTF-8是实现了Unicode的方式之一,特点是变长编码,它使用1-4个字节表示一个符号。

编码规则:

  1. 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
  2. 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

总结为下表,x表示字符

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

例:
“严”字的Unicode编码为100111000100101,用十六进制表示为U+4E25,处在上表的第三行。换成UTF-8则需要3个字节,二进制代码为11100100 10111000 10100101,转换成十六进制为E4B8A5。

参考:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ASCII,Unicode,utf-8等字符编码学习笔记 学习自阮一峰的网络日志,地址http://www.rua...
    KevinCool阅读 3,984评论 0 0
  • 卷二十四,汉纪十六。时间公元前74年至公元前68年。主要故事有:立废昌邑王,汉宣帝即位,霍光之死等等。 1、立废昌...
    贾海昕阅读 1,748评论 0 2
  • jianzi阅读 1,267评论 0 0
  • 爸比, 今天父亲节,手机终于到你手中了,顺丰还是靠谱的,现在天黑了我的飞机晚点,不然还能给你打给电话,写个明信片,...
    糊吹吹阅读 1,787评论 0 1
  • 这里的老大是少壮不努力老大徒伤悲里的老大,意思是上年纪了。美国老大说指的却不是美国由于建国时间太长的意思,而是美国...
    何二的李斯阅读 3,118评论 0 0