UTF-8/16/32编码
UTF-8
UTF-8是使用广泛Unicode 编码方式,最大特点就是可变长、实现了对 ASCII 码的向后兼容。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。
编码规则如下:
Unicode 十六进制码点范围 | UTF-8 二进制 | |
---|---|---|
0000 0000 - 0000 007F | 0xxxxxxx | ASCII 码完全相同 |
0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx | 对于需要使用 N 个字节来表示的字符(N > 1), |
0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx | 第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10, |
0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 剩下的二进制位则使用这个字符的 Unicode 码点来填充。 |
以“汉”为例,具体说明如何进行 UTF-8 编码和解码。
• “汉” Unicode 码点:0x6c49(110,1100,0100,1001)
• “汉”的 UTF-8 编码: 11100110 10110001 10001001,转换成十六进制就是 0xE6 0xB7 0x89。
• “汉”的 UTF-8 解码:如果一个字节的第一位是 0 ,则说明这个字节对应一个字符;如果一个字节的第一位1,那么连续有多少个 1,就表示该字符占用多少个字节。
UTF-16/16BE/16LE
UTF-16 编码介于 UTF-32 与 UTF-8 之间,同时结合了定长和变长两种编码方法的特点。
UTF-16BE,其后缀是 BE 即 big-endian,大端的意思。大端就是将高位的字节放在低地址表示。
UTF-16LE,其后缀是 LE 即 little-endian,小端的意思。小端就是将高位的字节放在高地址表示。
UTF-16,没有指定后缀,即不知道其是大小端,所以其开始的两个字节表示该字节数组是大端还是小端。即FE FF表示大端,FF FE表示小端。
预备概念——“平面”
Unicode 是一本很厚的字典,将全世界所有的字符定义在一个集合里。所有的字符不可能是一次性定义的,而是分区定义。每个区可以存放 65536 个(2^16)字符,称为一个平面(plane)。目前,一共有 17 个(2^5)平面,也就是说,整个 Unicode 字符集的大小现在是 2^21。
最前面的 65536 个字符位,称为基本平面(简称 BMP ),它的码点范围是从 0 到 2^16-1,写成 16 进制就是从 U+0000 到 U+FFFF。所有最常见的字符都放在这个平面,这是 Unicode 最先定义和公布的一个平面。剩下的字符都放在辅助平面(简称 SMP ),码点范围从 U+010000 到 U+10FFFF。
编码规则:基本平面的字符占用 2 个字节,辅助平面的字符占用 4 个字节。
UTF-16 的编码长度要么是 2 个字节(U+0000 到 U+FFFF),要么是 4 个字节(U+010000 到 U+10FFFF)。
问题:当遇到两个字节时,到底是把这两个字节当作一个字符还是与后面的两个字节一起当作一个字符呢?
• 这里有一个很巧妙的地方,在基本平面内,从 U+D800 到 U+DFFF 是一个空段,即这些码点不对应任何字符。因此,这个空段可以用来映射辅助平面的字符。
• 辅助平面的字符位共有 2^20 个,因此表示这些字符至少需要 20 个二进制位。UTF-16 将这 20 个二进制位分成两半,前 10 位映射在 U+D800 到 U+DBFF,称为高位(H),后 10 位映射在 U+DC00 到 U+DFFF,称为低位(L)。这意味着,一个辅助平面的字符,被拆成两个基本平面的字符表示。
• 因此,当我们遇到两个字节,发现它的码点在 U+D800 到 U+DBFF 之间,就可以断定,紧跟在后面的两个字节的码点,应该在 U+DC00 到 U+DFFF 之间,这四个字节必须放在一起解读。
以汉字"
UTF-8/16/32编码相关推荐
- 编码方式的简介(ASCII, LATIN-1, UTF-8/16/32)
编码方式的简介 1. ASCII ASCII是7比特的字符集,涵盖了英语中的绝大多数字符.编码从0到127. 2. ISOLatin-1(the ISO-8859-1 standard) ISO La ...
- Unicode、UTF 和 ISO-8859-1等编码方式详解与浏览器URL编码
将字符转换为二进制码的过程,我们称为编码,将二进制码转换为字符的过程,我们称为解码. 编码和解码时所采用的规则,我们称为字符集 常见的字符集: ASCII - 美国人编码,使用7位来对美国常用的字符进 ...
- ASP常用进制转化类(2,8,10,16,32,64)
<% ' 名称:HDOBTools ' 描述:进制转化类 ' 作用:用于各种进转的转化 Class HDOBToolsPrivate hdobHackPrivate Sub Class_Init ...
- c语言16x32点阵显示汉字,点阵16*32滚屏显示汉字
// matrix2pcs20140821.ino const int SH_CP = 8; const int DS = 9; const int ST_CP = 10; //声明4个数组临时变量 ...
- 设置二进制或者16/32位的某一位的值
设置某一位的值 传送门:获取二进制或者16/32位的某一位的值 1 | 任何值 = 1 ,任何值&0 = 0 [利用这两点进行设置值] 上代码 //获取二进制某一位的值 uint8_t get ...
- 怎么判断数字n是否为2的x次方,即2的幂次呢,比如2,4,8,16,32
怎么判断数字n是否为2的x次方,即2的幂次呢?比如2,4,8,16,32 提示:一些位运算的技巧 文章目录 怎么判断数字n是否为2的x次方,即2的幂次呢?比如2,4,8,16,32 @[TOC](文章 ...
- c语言16左移3位,点阵16*32综合(间断、上移、下移、左移、右移、左拉、右拉)C程序...
点阵16*32综合(间断.上移.下移.左移.右移.左拉.右拉)C程序,硬件电路:行驱动74HC154+S8550三极管,列驱动74HC595,具体原理图祥见:http://www.51hei.com/ ...
- 第七篇 亚龙236 led 16*32点阵显示显示汉字
第七篇 亚龙236 led 16*32点阵显示显示汉字 亚龙236设备显示模块有led点阵,16*32点阵可以显示汉字或图形. 这个模块只能教学用,实际的户外屏用的电路和它从原理上不一样.数码管模块也 ...
- 移植 CH376 USB FAT12/16/32文件系统芯片 单片机 MCU51
已经移植好的代码下载:http://download.csdn.net/detail/lxj_com2006/3793887 欢迎交流: QQ:67016879 EMAIL: lxj_com@163. ...
最新文章
- 五年前的转正我没有留下,校招进不了大公司就是失败吗?
- 重新定义智能平板电脑 第四范式与联想达成战略合作
- 【python数据挖掘课程】二十九.数据预处理之字符型转换数值型、标准化、归一化处理
- linux mysql5.6 安装
- 07.30《jQuery》——1.1DOM对和jQuery对象的转化
- VS中,DEBUG/RELEASE的宏定义不同引起的问题
- qq令牌64位密钥提取_qq令牌绑定工具无需密码2020
- 推荐一个app,收纳杭州最全登山地图!附亲测过的亲子徒步路线推荐
- python在线评测系统_怎样做一个 Online Judge(在线评测系统)?
- jwplayer.v7.1.4视频播放器的使用
- ubuntu14.04彻底卸载ibus安装fcitx拼音输入法
- 免费邮箱怎么注册?创建注册邮箱帐号免费吗?
- 登陆成功率99% 云知声携手平安好医生推声纹登录系统
- Prometheus Operator 安装
- 深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全
- 计算机毕业设计JavaBS高校教师考勤系统(源码+系统+mysql数据库+lw文档)
- 苹果全球开发者大会推出智能音箱网友吐槽Siri“掉链子”
- 职中计算机专业自我鉴定400字,中职计算机专业毕业自我鉴定
- ”核高基“重大专项造成体制浪费就应该取消
- 2017.07.23软件更新公告
热门文章
编码方式的简介 1. ASCII ASCII是7比特的字符集,涵盖了英语中的绝大多数字符.编码从0到127. 2. ISOLatin-1(the ISO-8859-1 standard) ISO La ...
将字符转换为二进制码的过程,我们称为编码,将二进制码转换为字符的过程,我们称为解码. 编码和解码时所采用的规则,我们称为字符集 常见的字符集: ASCII - 美国人编码,使用7位来对美国常用的字符进 ...
<% ' 名称:HDOBTools ' 描述:进制转化类 ' 作用:用于各种进转的转化 Class HDOBToolsPrivate hdobHackPrivate Sub Class_Init ...
// matrix2pcs20140821.ino const int SH_CP = 8; const int DS = 9; const int ST_CP = 10; //声明4个数组临时变量 ...
设置某一位的值 传送门:获取二进制或者16/32位的某一位的值 1 | 任何值 = 1 ,任何值&0 = 0 [利用这两点进行设置值] 上代码 //获取二进制某一位的值 uint8_t get ...
怎么判断数字n是否为2的x次方,即2的幂次呢?比如2,4,8,16,32 提示:一些位运算的技巧 文章目录 怎么判断数字n是否为2的x次方,即2的幂次呢?比如2,4,8,16,32 @[TOC](文章 ...
点阵16*32综合(间断.上移.下移.左移.右移.左拉.右拉)C程序,硬件电路:行驱动74HC154+S8550三极管,列驱动74HC595,具体原理图祥见:http://www.51hei.com/ ...
第七篇 亚龙236 led 16*32点阵显示显示汉字 亚龙236设备显示模块有led点阵,16*32点阵可以显示汉字或图形. 这个模块只能教学用,实际的户外屏用的电路和它从原理上不一样.数码管模块也 ...
已经移植好的代码下载:http://download.csdn.net/detail/lxj_com2006/3793887 欢迎交流: QQ:67016879 EMAIL: lxj_com@163. ...