mysql unicode转utf8_Unicode UTF-8 转换
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 转换相关推荐
- Mysql unicode 转中文
Mysql unicode 转中文 先创建转换函数 再调用该函数 先创建转换函数 ··· DROP FUNCTION IF EXISTS unicode_decode; DELIMITER $$ CR ...
- 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
参考博客: Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围 ...
- Mysql unicode编码内容的查询
Mysql unicode编码内容的查询 表中data字段存储的内容,此处为unicode编码: {"OBJECTID": 10, "\u540d\u79f0" ...
- ASCII、GB2312、GBK、Unicode、UTF-8介绍和转换
1.ASCII码 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为 ASCII 码,一直沿用至今.ASCII 码一共规定了128个字符的编码,比如空格S ...
- [字符集]Unicode和UTF-8之间的转换详解
最近在用VC++开发一个小工具,平时用惯了.NET,用起VC++最郁闷的就是字符串处理.当然最最让人难于琢磨的就是字符集,编码之间的转换.通过这几天的研究,终于明白了Unicode和UTF-8 ...
- Unicode和UTF-8之间的转换详解
Unicode是一个字符集,而UTF-8是 Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1 个字节.U ...
- php 兼容unicode文字的字符串大小写转换,php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()...
前言 网上流传着这么一个腾讯笔试题: PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的 ...
- Unicode 与 UTF-8 之间的转换
JS 中,所有的数字都是用64位浮点数的形式存储的. 我们知道数字是如何存储的,十进制转成二进制就可以了.那么字符是如何存储的呢?转成数字不就得了,再用二进制存,但是'1'不能用1表示,那给字符编号不 ...
- pythonunicode和str_python2 中 unicode 和 str 之间的转换及与python3 str 的区别
在python2中字符串分为 unicode 和 str 类型 Str To Unicode 使用decode(), 解码 Unicode To Str 使用encode(), 编码 返回数据给前端时 ...
最新文章
- java中的关键字static
- 安卓禁止ScrollView内的控件改变之后自动滚动
- 各向异性扩散滤波_原理与算法
- geth 以太坊钱包_以太坊Geth节点RPC API中文文档
- data URI scheme及其应用
- 创建SpringBoot项目时出现Cannot resolve plugin org.springframework的解决方法
- 【福利】爱德华·阿什福德·李:人类与AI技术将是共生关系
- javascript数组去重方法汇总
- Fiddler在PC/台式对Android进行抓包
- CSS 的三种样式 内联 内部 外部
- JavaScript escape/unescape 编码的 Java 实现
- ArcGIS中属性域的使用
- html实现圆形图片
- 我认为还算经典的语录
- WUST-CTF2020 writeup
- 51单片机堆栈深入剖析(转)
- Google中Gson的巧妙使用 —————— 开开开山怪
- python中pos是什么_如何在NLTK中使用pos_标记?
- mysql如何限制数据修改密码_MySQL_MySQL数据库中修改密码及访问限制设置详解,MySQL是一个真正的多用户、多 - phpStudy...
- SpaceX星际飞船将于2024年发射日本通信卫星