• UTF8 to unicode


    UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:

    以"I am Chinese"为例

    用ANSI储存:             12 Bytes

    用Unicode/UCS2储存:     24 Bytes + 2 Bytes(header)

    用UCS4储存:             48 Bytes + 4 Bytes(header)

    以"我是中国人"为例

    用ANSI储存:         10 Bytes(GB2312)

    用Unicode/UCS2储存: 10 Bytes + 2 Bytes(header)

    用UCS4储存:         20 Bytes + 4 Bytes(header)

    由此可见直接以Unicode/UCS的原始形式来储存是一种极大的浪费,而且也不利于互联网的传输(中文稍为合算一点^_^)。

    有见及此,Unicode/UCS的压缩形式--UTF8出 现了,套用官方网站的首句话『UTF-8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也适用于编码UCS,故亦可称为『UCS transformation formats (UTF)』

    UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。

    编码原理

    先看这个模板:

    UCS-4 range (hex.)     UTF-8 octet sequence (binary)

    0000 0000-0000 007F -- 0xxxxxxx

    0000 0080-0000 07FF -- 110xxxxx 10xxxxxx

    0000 0800-0000 FFFF -- 1110xxxx 10xxxxxx 10xxxxxx

    0001 0000-001F FFFF -- 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    0020 0000-03FF FFFF -- 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    0400 0000-7FFF FFFF -- 1111110x 10xxxxxx ... 10xxxxxx

    编码步骤:

    1) 首先确定需要多少个8bits(octets)

    2) 按照上述模板填充每个octets的高位bits

    3) 把字符的bits填充至x中,字符顺序:低位→高位,UTF8顺序:最后一个octet的最末位x→第一个octet最高位x

    不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。以UTF8格式储存的文件档首标识为EF BB BF。

    效率

      从上述编码原理中得出的结论是:

    1.每个英文字母、数字所占的空间为1 Byte;

    2.泛欧语系、斯拉夫语字母占2 Bytes;

    3.汉字占3 Bytes。

    由此可见UTF8对英文来说是个非常诱人的方案,但对中文来说则不太合算,无论用ANSI还是 Unicode/UCS2来编码都只用2 Bytes,但用UTF8则需要3 Bytes。

    以下是一些统计资料,显示用UTF8来储存文件每个字符所需的平均字节: 1.拉丁语系平均用1.1 Bytes;

    2.希腊文、俄文、阿拉伯文和希伯莱文平均用1.7 Bytes;

    3.其他大部份文字如中文、日文、韩文、Hindi(北印度语)用约3 Bytes;  4.用超过4 Bytes的都是些非常少用的文字符号。

  • 相关阅读:
    Java 截取目标长度英文单词字符串 要求避免截断单词
    mysql报Fatal error encountered during command execution的解决办法
    PostgreSQL 学习01 Centos7.6安装PostgreSQL10
    Ubuntu14.04 + KinectV2驱动安装 以及 Ros接口(基于网上方法试错 改进版)
    传统定位方法简介--------里程计、IMU惯性传感器以及光电编码器等
    Vue.js 动态绑定class
    MongoDB数据导入导出成csv或者json
    exception 'yiiaseErrorException' with message 'Class 'MongoClient' not found'
    exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb
    浅谈Angular的 $q, defer, promise
  • 原文地址:https://www.cnblogs.com/zhuzheic/p/2958939.html
Copyright © 2020-2023  润新知