您的位置:首页 > 其它

以UTF-8编码方式讲数据存储的编码

2017-05-15 20:20 155 查看
UNICODE编码详解之UTF-8 , UTF-16,UTF-32

      名词解释:  Unicode只是一个简单的标准,用来把字符映射到数字上,Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过UTF来指定。

      文本数据在计算机底层的表示:

                在计算机的硬盘,内存(等可以存储计算机数据的设备间)上数据都是以0和1表示的。比如这么一串在存储设备上的数据011010100010101010101010......如果它来自某个文本文件保存后的结果。

         如何读懂它:

                我们如何从这一串的0和1中从新解码得到一个个的字符呢?显然你需要把这一串的0和1分成一段一段的0和1。例如ASCII编码,他去翻译这些1和0的数据时它会把他们所有分成每组8位数据依次对照ASCII码表进行一一对应的译码,译码结束后请求计算机在屏幕上绘制出相应的字符,以便与使用者交流。

        那么UTP-8这种编码表是怎么去翻译这些由0和1组成的数据的呢?

         UTF-8编码规则:

                 1.可变长编码,由第一个字节决定该字符编码长度

                 2.大于127的码点都用多字节来编码,多字节包含开头字节和后续字节开头字节以若干个1开头(长度为几就有几个1,因此只要读完开头字节就可以知道本字符共有多少个字节),后接1个0.后续字节都以10开头。

                 3.从右到做,后续字节每个字节占用原码点6个位,剩余的放在开头字节。

                 4.开头字节和后续字节不共享任何数据,因此utf8是自同步的。举例来说我们看到一个字节以110…开头时,我们就知道这是一个2字节的字符的开头字节。

               下面这张图片是来自javaSE1.8api   java.io.Input 类中对Unicode字符编码的一个解释图



         

           如此一来我们就来看看以下的例子:

                  0010 0010 1101 0101 1000 0101     (译码的时候看见了0说明接下的8 - 1位表示一个字符的真正编码,遇到了110表示接下来的16 - 1 - 2  = 13位表示一个字符的真正编码,遇到了1110则接下来的3*8 - 3 - 2*2 =24位表示一个字节的真正编码,)所以对上述的数据串分隔为 (0010 0010)(1101 0101 1000 0101)为什么减1和减2减3呢,因为开头的0 110 10 1110 都是此编码的标识位。

  
  
  
  
  
 这个表不小心弄错了~~
                   看看接下来更具体的 例子:



申明:内容有来自某博客:http://www.cnblogs.com/developerY/p/3575271.html 和 http://www.cnblogs.com/yelongsan/p/6236988.html
             那么UTF-16和UTF-32又是什么呢?看了上述的讲解,你 大概已经知道UTF-8是以8个二进制位为一单位进行译码和编码的,而UTF-16就是以16位为一单位,UTF-32就是以32位二进制位为一单位来编码的。

<a href=
http://www.baidu.com>W3School</a>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: