51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 14599|回复: 21
打印 上一主题 下一主题

什么是UTF8

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-11-22 17:51:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
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
   用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
4) 解码的原理一样。

实例:(留意每个bit的颜色,粗体字为模板内容)

UCS-4 UTF-8  
HEX BIN Bytes BIN HEX Bytes  
0000 000A 00001010 4 00001010 0A 1  
0000 0099 10011001 4 11000010 10011001 C2 99 2  
0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3  

  不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。

  以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的都是些非常少用的文字符号。

[ 本帖最后由 Kingson 于 2007-11-22 17:55 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    22#
    发表于 2010-7-23 12:59:10 | 只看该作者
    [编辑本段]概述
      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   用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   4) 解码的原理一样。   实例:(留意每个bit的颜色,粗体字为模板内容)   UCS-4 UTF-8   HEX BIN Bytes BIN HEX Bytes   0000 000A 00001010 4 00001010 0A 1   0000 0099 10011001 4 11000010 10011001 C2 99 2   0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3   不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。   以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的都是些非常少用的文字符号。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2010-3-4 13:21:34 | 只看该作者
    了解一点!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2010-3-3 15:24:02 | 只看该作者
    我以前做本地化时见过7中印度文字,吐了。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2010-1-15 10:57:59 | 只看该作者
    谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2010-1-11 12:01:15 | 只看该作者
    3qheihei
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2009-12-28 11:55:46 | 只看该作者
    好贴。。。。谢了。。楼主。。

    正想了解这方面的知识
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2009-4-22 18:06:37 | 只看该作者
    Thanks.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2009-4-17 12:47:08 | 只看该作者
    长知识了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2009-3-4 17:50:42 | 只看该作者
    受教了。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2009-2-18 17:13:16 | 只看该作者

    yun

    xuexi
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-15 23:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    12#
    发表于 2009-2-16 17:03:32 | 只看该作者
    楼主真像好人。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2009-2-6 14:48:31 | 只看该作者
    很好啊,学习了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2009-1-7 16:53:57 | 只看该作者
    长知识啦~~。谢谢LZ
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2008-12-2 08:52:48 | 只看该作者
    好,正在关注这方面知识,非常受用,谢谢!!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2008-11-25 14:57:55 | 只看该作者
    意思明白,但那个例子要再研究一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2008-11-2 16:51:39 | 只看该作者
    真不错
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2008-9-8 18:26:38 | 只看该作者
    很不错的知识文档,其实在国际化和本地化测试中,经常会与这些概念打交道
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2008-8-12 13:31:28 | 只看该作者
    Thanks a lot
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2008-8-1 09:29:46 | 只看该作者
    好贴。。。。谢了。。楼主。。

    正想了解这方面的知识呢。。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 22:31 , Processed in 0.079482 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表