通常将一个标准中能够表示的所有字符的集合称为字符集,比如ISO/Unicode所定义的字符集为Unicode。在Unicode中,每个字符占据一个码位/Unicode 编号(用4位十六进制数表示,Code point:U+ FFFF),如U+ 0000为“Null”,U+ 597D="好"。Unicode字符集共定义了1 114 112个这样的位,使用从0到10FFFF的十六进制数唯一地表示世界上几乎所有的字符。

虽然字符集中的码位唯一,但由于计算机存储数据通常是以字节为单位的,而且出于兼容之前的ASCII(0x00-0x7F)、节省存储空间等诸多原因,需要一种具体的编码方式来对字符码位进行标识。规定每个字符的Unicode编号如何存储(用一个字节还是多个字节存储,用哪些字节来存储),这个规定就叫做“编码”。常见的基于Unicode字符集的编码方式有UTF-8、UTF-16及UTF-32。

字符集中的字符与Unicode 编号一一映射,对Unicode编号进行编码转为二进制存入内存。同一段二进制,每一个字节一个编号还是每两个字节一个编号,解码方式不一样,得到的编号不一样,对应的映射字符也不同。这就是乱码的原因。

编码方式:

UTF-8是一种变长的编码方式,采用了高位保留方式来区别不同变长。它使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。越是常用的字符,字节越短,最前面的128个字符,只使用1个字节表示,与ASCII码完全相同。

UTF-8的编码规则:

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

2)对于N字节的符号,第一个字节的前N位都设为1,第N+1位为0,后面字节的前两位一律设为10。剩下的二进制位,全部为这个符号的unicode码。

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

如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

由于UTF-8这种节省空间的特性,导致它成为互联网上最常见的网页编码。

Unicode字符集https://unicode-table.com/en/#control-character

最新文章

  1. 【腾讯Bugly干货分享】深度学习在OCR中的应用
  2. Fix network adapter not present problem in cloned CentOS
  3. beta 阶段的 postmortem 报告
  4. PHP发送邮件。
  5. angularJS中XHR与promise
  6. jQuery显示与隐藏返回顶层的箭头
  7. C# winfrom 模拟ftp文件管理
  8. RequireJS基础知识
  9. CodeSmith生成实体的分页读取规则
  10. RunLoop想入门,看这篇就够了
  11. 在IntelliJ IDEA里创建简单的基于Maven的SpringMVC项目
  12. Python测试Post请求
  13. docker swarm(当前官网示例)
  14. HashMap的扩容机制---resize()
  15. 中国非正常死亡最高的行业 TOP 10
  16. Python 面向对象详解
  17. 给openvpn客户分配固定ip地址
  18. 第四章 Spring.Net 如何管理您的类___对象的手动装配
  19. pcap报文格式
  20. MapReduce实战(二)自定义类型排序

热门文章

  1. Gson解析复杂的Bean类实现Parcelable
  2. 02 Learning to Answer Yes/No
  3. C# WebClient、jQuery ajax jsonp实现跨域
  4. AES算法,DES算法,RSA算法JAVA实现
  5. Xamarin XAML语言教程使用Xamarin Studio创建XAML(二)
  6. 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器
  7. 图文详解linux如何搭建lamp服务环境
  8. java复习(5)---接口、继承、多态
  9. centos7安装httpd和php
  10. 单Js 的重力游戏开发