关于编码的一些总结

unicode定义了1,114,112个字符,0hex to 10FFFFhex ,共17个Plane

第一个Plane为0x0--- 0xFFFF ,一共65536个字符,包括了最常用的字符 (其中包括中日韩的常用字符) 称之为 Basic Multilingual Plane or BMP 需要注意的是mysql的utf8字符集也只实现了这个Plane,所以mysql里面字段设置为utf8的话,只能存储0x0--- 0xFFFF这个代码点范围内的字符,比如emoji表情就不在这个范围。略坑

那剩余的16个Plane就称之为 supplementary planes or astral planes


5.5.3以上的mysql支持utf8mb4,这个字符集完全向下兼容utf8,但是他的存储范围覆盖了整个unicode的定义范围,即0x000000-0x10FFFF.



utf8是unicode编码方案的一种存储实现,他兼容acsii字符集,但是也正是因为这种兼容导致存储汉字等多字符编码的时候需要浪费一些位来表示额外信息。


  • 如果一个字节的第一位为0,那么代表当前字符为单字节字符,占用一个字节的空间。0之后的所有部分(7个bit)代表在Unicode中的序号。(可表示的unicode代码点范围为0x0-0x7f)
  • 如果一个字节以110开头,那么代表当前字符为双字节字符,占用2个字节的空间。110之后的所有部分(5个bit)代表在Unicode中的序号。且第二个字节以10开头(可用6个bit,加上第一个字节可以是引用的5,一共可用是11位  可表示的unicode代码点范围为0x80-0x7FF)
  • 如果一个字节以1110开头,那么代表当前字符为三字节字符,占用3个字节的空间。1110之后的所有部分(4个bit)代表在Unicode中的序号。且第二、第三个字节以10开头(第二个第三个字节的可使用位都只有6,加上第一个字节可以使用的为为4 一共为6+6+4=16为,可表示的unicode代码点范围为0x800-0xFFFF)这3部分就是unicode的第一个Plane ,也就是BMP,mysql的utf8字符集也只支持上面这3部分,所以mysql的utf8字符集的一个字符最多使用3个字节进行存储
  • 如果一个字节以10开头,那么代表当前字节为多字节字符的非首位字节。10之后的所有部分(6个bit)代表在Unicode中的序号。
  • 如果一个字节以11110开头,那么代表当前字符为四字节字符,占用4个字节的空间。11110之后的所有部分(3个bit)代表在Unicode中的序号。且第二、第三、第四个字节以10开头(可表示的unicode代码点范围为0x10000-0x10FFFF) 这个范围就是 supplementary planes or astral planes


参考:https://zh.wikipedia.org/wiki/UTF-8

https://zh.wikipedia.org/wiki/Unicode

https://en.wikipedia.org/wiki/Plane_%28Unicode%29

http://blog.jobbole.com/84903/                十分钟搞清字符集和字符编码

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html                    字符编码笔记:ASCII,Unicode和UTF-8

https://mathiasbynens.be/notes/mysql-utf8mb4           How to support full Unicode in MySQL database

http://blog.wpjam.com/article/emoji-for-php-mysql/           Emoji 表情图标在 iOS 与 PHP 之间通信及 MySQL 存储

http://blog.csdn.net/qdkfriend/article/details/7576524       Emoji表情符号兼容方案

http://blog.charlee.li/unicode-intro/ 



http://www.endmemo.com/unicode/unicodeconverter.php unicode 和utf8的在线转换


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值