• 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之间的转换关系表
    UCS-4编码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。

  • 相关阅读:
    如何解决错误【selenium.common.exceptions.SessionNotCreatedException】
    VSFTP常用功能及参数配置
    ROS白名单服务端PHP脚本,客户端ROS脚本
    ocserver标准配置文件
    linux send与recv函数详解
    LINUX 恢复rm删除的文件
    C语言实现md5函数代码
    linux c语言获取CPU,内存,网速,磁盘使用,IO
    linux c语言fork socket 并发回射服务器
    杨惠兰不值得任何人付出
  • 原文地址:https://www.cnblogs.com/chenyg32/p/4654689.html
Copyright © 2020-2023  润新知