Unicode是类似“U+4E25”或“\u4E25”的编码方式,很多情况下是4个十六进制的数,有时候不止。

Unicode编码系统可分为编码方式和实现方式两个层次:

编码方式:“严”的Unicode是4E25;

实现方式:“严”的UTF-8是E4B8A5。

Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF),UTF-8(8-bit Unicode Transformation Format)是Unicode一种实现方式。

UTF-8的编码规则很简单,只有二条:

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

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

Unicode和UTF-8之间的转换关系表

UTF-8字节流

00000000 – 0000007F

0xxxxxxx

00000080 – 000007FF

110xxxxx 10xxxxxx

00000800 – 0000FFFF

1110xxxx 10xxxxxx 10xxxxxx

00010000 – 001FFFFF

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

00200000 – 03FFFFFF

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

04000000 – 7FFFFFFF

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

例如已知“严”的Unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。

然后,把“严”的Unicode二进制形式(100111000100101),从后向前填入格式中的x,多出的位补0。

最后,“严”的UTF-8编码是“11100100 10111000 10100101”,这是保存在计算机中的实际数据,转换成十六进制就是E4B8A5。

问题:上表的划分为什么是00-7F,0080-07FF等,这样划分的目的是什么?

由于对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码,所以0xxxxxxx能表示的最大范围为00-7F,因为一共有7个x,所以最大为7F(注意:这里的单字节指的是编码后的UTF-8的字节长度为1,而不是Unicode的字节数);

由于对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10,所以110xxxxx 10xxxxxx能表示的最大范围为0080-07FF,因为一共有11个x,所以最大为07FF,最小的理论上当然不是0080,但是0080以下的应该用单个字节去编码,所以实际上双字节的UTF-8的最小数为11000010 10000000(注意:这里的n字节指的是编码后的UTF-8的字节长度为n,而不是Unicode的字节数)。

综上,这个表实际的产生方式是根据UTF-8的编码规则去确定右边一列,再根据右边一列确定左边一列,最后利用该表来确定某个Unicode字符的UTF-8编码。

另外,从上表可以看出,Unicode是一种变长的编码方式。

p.s. 提供一个在线Unicode和中文的转换工具,注意\u4E25不能写成\U4E25。

mysql unicode转utf8_Unicode UTF-8 转换相关推荐

  1. Mysql unicode 转中文

    Mysql unicode 转中文 先创建转换函数 再调用该函数 先创建转换函数 ··· DROP FUNCTION IF EXISTS unicode_decode; DELIMITER $$ CR ...

  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. Mysql unicode编码内容的查询

    Mysql unicode编码内容的查询 表中data字段存储的内容,此处为unicode编码: {"OBJECTID": 10, "\u540d\u79f0" ...

  4. ASCII、GB2312、GBK、Unicode、UTF-8介绍和转换

    1.ASCII码 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为 ASCII 码,一直沿用至今.ASCII 码一共规定了128个字符的编码,比如空格S ...

  5. [字符集]Unicode和UTF-8之间的转换详解

        最近在用VC++开发一个小工具,平时用惯了.NET,用起VC++最郁闷的就是字符串处理.当然最最让人难于琢磨的就是字符集,编码之间的转换.通过这几天的研究,终于明白了Unicode和UTF-8 ...

  6. Unicode和UTF-8之间的转换详解

    Unicode是一个字符集,而UTF-8是 Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1 个字节.U ...

  7. php 兼容unicode文字的字符串大小写转换,php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()...

    前言 网上流传着这么一个腾讯笔试题: PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的 ...

  8. Unicode 与 UTF-8 之间的转换

    JS 中,所有的数字都是用64位浮点数的形式存储的. 我们知道数字是如何存储的,十进制转成二进制就可以了.那么字符是如何存储的呢?转成数字不就得了,再用二进制存,但是'1'不能用1表示,那给字符编号不 ...

  9. pythonunicode和str_python2 中 unicode 和 str 之间的转换及与python3 str 的区别

    在python2中字符串分为 unicode 和 str 类型 Str To Unicode 使用decode(), 解码 Unicode To Str 使用encode(), 编码 返回数据给前端时 ...

最新文章

  1. java中的关键字static
  2. 安卓禁止ScrollView内的控件改变之后自动滚动
  3. 各向异性扩散滤波_原理与算法
  4. geth 以太坊钱包_以太坊Geth节点RPC API中文文档
  5. data URI scheme及其应用
  6. 创建SpringBoot项目时出现Cannot resolve plugin org.springframework的解决方法
  7. 【福利】爱德华·阿什福德·李:人类与AI技术将是共生关系
  8. javascript数组去重方法汇总
  9. Fiddler在PC/台式对Android进行抓包
  10. CSS 的三种样式 内联 内部 外部
  11. JavaScript escape/unescape 编码的 Java 实现
  12. ArcGIS中属性域的使用
  13. html实现圆形图片
  14. 我认为还算经典的语录
  15. WUST-CTF2020 writeup
  16. 51单片机堆栈深入剖析(转)
  17. Google中Gson的巧妙使用 —————— 开开开山怪
  18. python中pos是什么_如何在NLTK中使用pos_标记?
  19. mysql如何限制数据修改密码_MySQL_MySQL数据库中修改密码及访问限制设置详解,MySQL是一个真正的多用户、多 - phpStudy...
  20. SpaceX星际飞船将于2024年发射日本通信卫星

热门文章

  1. 0x18 大容量存储器结构
  2. table th、td设置最大高,超高度出现滚动条
  3. 胡戈 007大战猪肉王子
  4. Apache-POI 设置excel单元格样式字体等
  5. 作为计算机专业学生,说一说校招
  6. 项目管理之中高级管理(成本管理)
  7. 数值分析用MATLAB实验报告,数值分析matlab实验报告
  8. linux查看日志保留时间多长的命令,Linux常用的日志查看命令
  9. 程序员面试题精选100题(51)-顺时针打印矩阵
  10. 工赋开发者社区 | MES与ERP/APS/PLM等的系统集成技术