zoukankan      html  css  js  c++  java
  • 浅谈UTF-8,UTF-16,UTF-32

      上篇博客,我主要是介绍了一些关于ACII码,UNICDOE,和UTF-8,同时也留下了一个问题,就是UTF-8和UTF-16的区别。今天我特意去翻了一些关于UTF编码的文章,大概地了解了一下。

      首先是UTF-32。UTF-32是一种固长的编码方式,一共有四个字节,具体的编码细节我就不说了,因为是固长的,所以你一个一字节能搞搞定的字符,它也强行占用了四个字节的空间,对内存的浪费已经到了一个可耻的地步,所以一般没有人会采用。

      其次是UTF-8,UTF-8就有点意思了,我以前一直以为是用一个字节来表示字符,现在才发现这是大错特错,UTF-8是一到四个字节的变长编码方式,这个意思就是如果这个字符只需要占用一个字节,它就用一个字节表示,如果多个字节它就会用多个字节来表示。所以很多编码方式都会采用UTF-8,但是节省了空间的同时也是要付出代价的,你就需要在编解码过程多费些时间,这也是很合理的,我在上一篇有讲了一些关于UTF-8表示方式的,所以这里我就不再作具体的细节讲解。

      真正的主角是这位UTF-16,可能你们会认为这个是由两个字节组成的固长编码方式,但是,现实却错的离谱。它是综合了UTF-32和UTF-8的一个结合体,怎么说呢,简单点就是它是由固长和不定长这两部分组成的。那它又是怎么个编码方式呢?

      其实,UTF-16是分为两部分的,一部分是两个字节组成的基本平面字符,另一部分是由四个字节组成的辅助平面字符。所以,UTF-16要么是两个字节,要么是四个字节。单看名字简直误导人。那么UTF-16在编解码时候又是如何区分是两个字节还是四个字节呢。

      基本平面其实在U+D800到U+DBFF之间是一个空段,所以UTF-16在解码时就先判断前两个字节是不是落在这个空段中,如果是,那么它后面跟着的两个字节就要一起解析,这个字符也就变成了辅助平面。如果不是,那么就按两个字符解析,同理这个字符也就是基本平面。

      好了,我了解的大概是这么多,这篇博客绝对远远比不上其他前辈的讲解,如果你想要了解更多,可以去看看其他前辈写的,我也主要是做个小笔记。

  • 相关阅读:
    股票交易接口
    股票自动买卖
    安信证券接口的demo做得不好。
    MEF bug? 无法加载外部的DLL
    如何移植行情软件的指标到千发股票自动交易软件?
    股票策略交易
    博客园自动关注病毒 只活了一小会儿。
    Float 运算的怪异性
    文件大小和占用空间为何不一样
    做最好的自己
  • 原文地址:https://www.cnblogs.com/empty-run/p/5902151.html
Copyright © 2011-2022 走看看