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

NCR(Numeric Character Reference),以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。数字取值为目标字符的 Unicode code point。U+002C === ,

虽然字符集中的码位唯一,但由于计算机存储数据通常是以字节为单位的,而且出于兼容之前的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这种节省空间的特性,导致它成为互联网上最常见的网页编码。

比如中文'严'字,二进制表示成:11100100 10111000 10100101

对应的Unicode code point为 0100 1110 0010 0101对应的HEX值\x4E25

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

转载于:https://www.cnblogs.com/kevin2chen/p/6424269.html

Unicode字符集和编码方式相关推荐

  1. 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK

    字符集和编码方式:ASCII,Unicode和UTF-8, latin1,BIG5,GBK 参考: 字符集 字符集编码详解 一. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制 ...

  2. unicode字符显示方框_【硬核】韦东山:字符的编码方式

    自从上次发布"Framebuffer应用编程"视频后, 我们花了10多天调试STM32MP157板子,4.19内核.5.4内核全部调试通过! 在调试过程中,编写了不少文档,到时整理 ...

  3. 字符的编码方式 ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian

    字符的编码方式很多种 ,我们常用到的是ASCII .GBK .UTF-8 .Unicode .Unicode big endian等. 想查看的话,可以用记事本新建一个txt文档,里面输入字符或汉字, ...

  4. Ruby:字符集和编码学习总结

    背景 Ruby直到1.9版本才很好的支持了多字节编码,本文简单总结了今天学习的关于Ruby编码方面的知识. 字符串可以使用不同的编码 在.NET中字符串的编码是一致的,Ruby允许字符串有不同的编码, ...

  5. 你不知道的 字符集和编码(编码字符集与字符集编码)

    我的上篇文章,有朋友提出字符集和编码的区别,我在此立文和大家讨论下 常说的字符集和编码区别,其实就是编码字符集和字符集编码的区别,其实,单单如果只是说字符集,没有任何编码的概念的话,那么字符集其实仅仅 ...

  6. 转:Unicode字符集和多字节字符集关系

    原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...

  7. Unicode字符集和多字节字符集关系(一)

    另外可参考: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 http://blog.csdn.net/smonster/archive/2008/10/31/3194587.a ...

  8. 创建数据库,指定数据库的字符集和编码顺序

    创建数据库,指定它的字符集和编码顺序 create database {数据库名称} CHARACTER SET {字符集} COLLATE {排序规则} 举例: create database co ...

  9. 面试题字符集和编码区别_您和理想工作之间的一件事-编码面试!

    面试题字符集和编码区别 A recruiter calls you for a position with your dream company. You get extremely excited ...

  10. 设置MySQL排序方式_设置MySQL设置字符集和排序方式

    1. 编辑/etc/my.cnf文件, 在"[client]"下添加"default-character-set=utf8" 2. 编辑/etc/my.cnf文 ...

最新文章

  1. 用父节点表示法表示一棵树
  2. IE访问历史记录恢复工具pasco
  3. SQLServer2008安装失败的解决办法
  4. 下载合适的python-python下载文件的三种方法
  5. 如何用消息系统避免分布式事务?
  6. Intellij IDEA运行报Command line is too long解法
  7. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...
  8. l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...
  9. delphi 读取ini所有项_财务机器人真的会代替财务人员所有工作吗?
  10. python内置排序算法_2021-01-05 排序算法(Python语言实现)
  11. 【阿里云MPS】MPS(原MTS)概述
  12. 通过接口字段名称反向猜测数据库列名
  13. 远程连接SQL Server数据库
  14. 你知道,java项目中是如何获取文件地址的吗?
  15. [POJ3177]Redundant Paths(双联通)
  16. STM32CubeMX HAL库+STM32F407+uCOS-III移植
  17. 移动网络广告优化(速度优化篇)
  18. (6.0系统手机)安卓神器Xposed框架ROOT安装指南
  19. 在aspx页面显示一张完整的RDL报表
  20. 看电影哪款蓝牙耳机降噪效果最好?性价比降噪蓝牙耳机推荐

热门文章

  1. 《Total Commander:万能文件管理器》——第4.5节.其他补充
  2. 如何解决GBK的编码的文件中的中文转换成为UTF-8编码的文件而且不乱码
  3. Delphi 与 DirectX 之 DelphiX(94): TDIB.DrawAdditive();
  4. oracle列表分区ADD VALUES或DROP VALUES包含数据变化
  5. 苹果HTC专利战正酣: 逃离Android?
  6. 内大考研计算机专业课,2019计算机考研专业课核心考点梳理
  7. 自己实践的mac安装python3Linux安装python3
  8. 链家网页爬虫_R爬虫小白入门:Rvest爬链家网+分析(一)
  9. access中如何画斜线_三维并没有想象中那么难,思路清晰画图就简单
  10. IEquatable「T」和Equal详解