一、理论说明
UTF-8

UTF-8 是一个非常惊艳的编码方式,漂亮的实现了对 ASCII 码的向后兼容,以保证 Unicode 可以被大众接受。

UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,它的最大特点就是可变长。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。编码规则如下:

对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码那个年代的文档用 UTF-8 编码打开完全没有问题。对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 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

根据上面编码规则对照表,进行 UTF-8 编码和解码就简单多了。下面以汉字“汉”为利,具体说明如何进行 UTF-8 编码和解码。

“汉”的 Unicode 码点是 0x6c49(110 1100 0100 1001),通过上面的对照表可以发现,0x0000 6c49 位于第三行的范围,那么得出其格式为 1110xxxx 10xxxxxx 10xxxxxx。接着,从“汉”的二进制数最后一位开始,从后向前依次填充对应格式中的 x,多出的 x 用 0 补上。这样,就得到了“汉”的 UTF-8 编码为 11100110 10110001 10001001,转换成十六进制就是 0xE6 0xB7 0x89。

解码的过程也十分简单:如果一个字节的第一位是 0 ,则说明这个字节对应一个字符;如果一个字节的第一位1,那么连续有多少个 1,就表示该字符占用多少个字节。

二、代码

    println!("unicode码:");let ch ='汉' as i32;// unicode 码let ch_unicode = format!("{:X}",ch);println!("ch:{:?}",ch_unicode);println!("字节码和二进制代码:");let my_char = "汉".as_bytes();let len = my_char.len();for i in 0..len{println!("bytes[{:?}]:?],{:?}",i,&my_char[i]);let bit_char= format!("{:b}",my_char[i]);println!("i :{:?} ,bit_char :{:?}",i,bit_char);}

output:

unicode码:
ch:"6C49"
字节码和二进制代码:
bytes[0]:?],230
i :0 ,bit_char :"11100110"
bytes[1]:?],177
i :1 ,bit_char :"10110001"
bytes[2]:?],137
i :2 ,bit_char :"10001001"

Rust : utf8与unicode码相关推荐

  1. 中文与Unicode码互转(utf-8)

    实验一. text = u'你好,今天天气不错' text print(text)text = '\u4f60\u597d\uff0c\u4eca\u5929\u5929\u6c14\u4e0d\u9 ...

  2. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    参考博客: Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围 ...

  3. 字符编码ASCII、Unicode 、UTF-8 及实例汉字与Unicode码的相互转化

    字符编码ASCII.Unicode .UTF-8 及实例汉字与Unicode码的相互转化 ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态, ...

  4. Unicode码转UTF8

    转换代码 Unicode码查询网站:https://www.qqxiuzi.cn/zh/unicode-zifu.php //U-00000000 - U-0000007F : 0xxxxxxx // ...

  5. [PHP] unicode码、UTF-8码、字符的相互转换

    unicode与UTF-8 unicode是一个大型字符集,unicode字符集收录了世界上所有的字符,并且为每一个字符分配了一个唯一的数字类型的ID值,这个ID在英文中叫unicode code p ...

  6. Go 学习笔记(31)— 字符串 string、字符 rune、字节 byte、UTF-8 和 Unicode 区别以及获取字符串长度

    1. 字符串 string 类型 Go 语言中字符串的内部实现使用 UTF-8 编码,通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问.当然, Go 语言也支持按照传统的 ASCII ...

  7. 字符编码总结(UTF-8,UNICODE)

    UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所 ...

  8. python3进行汉字和unicode码的转换

    输出某个unicode码对应的汉字和某个汉字对应的unicode编码. ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小伙伴,互帮互助,群里还 ...

  9. php输出字符unicode码,[PHP]单字符Unicode编码解码函数

    PHP 自带函数里面似乎是没有能够对字符或字符串进行直接转换的函数,百度了一下,发现了一个封装函数能用. 精简过后的函数内部还是会经过几次编码转换,但是我发现编码之后对特殊字符的转换有问题,索性再精简 ...

  10. Visual Studio——多字节编码与Unicode码

    多字节字符与宽字节字符 1) char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t.  char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因 ...

最新文章

  1. 最常见的《最聪明的技巧》实战讲解!
  2. 实训C++语言设计——Date日期系统实现
  3. 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
  4. js样式会覆盖html样式,js实现html节点、CSS样式、事件的动态添加以及html覆盖层的添加...
  5. 霍金的遗愿清单:离开地球,警惕人工智能
  6. 【干货】普华永道:新形势下,企业如何进行数字化转型.pdf(附下载链接)
  7. php+mysql事务处理例子详细分析实例
  8. 【转】只有运用你的逻辑才能看懂其中的恐怖
  9. de4dot 反编译
  10. matlab 数字波束合成,dbf数字波束合成
  11. aliez歌词_【aLIEz】附平假名歌词(完整)
  12. Excel的FIND函数及其用法
  13. 中央民族大学教授赵小兵:少数民族语言信息化关乎民众福祉,需要各界的更多支持...
  14. 如何以管理员身份进入dos命令窗口
  15. Cocoa -- 添加和移除开机启动项
  16. cmake Could NOT find Boost (missing: xxx 的问题 已解决
  17. hadoop框架流程图梳理
  18. WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord
  19. 系统架构中常见问题及解决方案
  20. ResetTemplate封装

热门文章

  1. 第156天:canvas(三)
  2. 实例展示elasticsearch集群生态,分片以及水平扩展.
  3. day15-CSS内容补充之overflow
  4. 将一个存放了若干个对象的数组按照对象的某个属性值进行分组
  5. 使用webclient上传下载实例
  6. centos6 下安装xfce+vnc
  7. RAID结构介绍以及RAID1、RAID0等各种模式的区别
  8. 硬盘安装 Ubuntu 9.04 与 XP 双系统 (含 Grub 不写入 MBR 的方法)
  9. Java EE 6 最终草案暗示了平台的未来发展方向
  10. apache多域名403配置