UTF-8编码方式

    Unicode规定了一套字符集,包含了世界上大多数字符,规定了这些字符的编码,每个编码可以理解为一个唯一的数字。
    Unicode之规定了字符集,只规定了1对应的是什么字符,2对应的是什么字符。至于传输和存储,各个系统必须自己实现。在计算机领域里,一般用 UTF-8,UTF-16,UTF-32 三种传输和存贮格式。

    我们可以说,Unicode是定义,UTF-8 是实现。

----------1. 范围---------

    * Plane 0 (0000–FFFF),这个范围被称为Basic Multilingual Plane (BMP),包含了65536个字符,目前全世界的人类文字和字符都被定义在这个范围里。其中大部分是中日韩字符。
    * Plane 1 (10000–1FFFF): Supplementary Multilingual Plane (SMP).
    * Plane 2 (20000–2FFFF): Supplementary Ideographic Plane (SIP)
    * Planes 3 to 13 (30000–DFFFF) are unassigned
    * Plane 14 (E0000–EFFFF): Supplementary Special-purpose Plane (SSP)
    * Plane 15 (F0000–FFFFF) reserved for the Private Use Area (PUA)
    * Plane 16 (100000–10FFFF), reserved for the Private Use Area (PUA)

----------2. UTF-8----------

    UTF-8是一种兼容ASKII的Unicode传输存储格式。根据字符编码的范围不同而使用不一样的存储方式和长度。下面这个表里,字段1表示Unicode编码范围(十六进制),字段2表示编码所使用的存储方式(二进制),或许称为模板更为形象。字段2其实也表示了一个字符在计算机里存储所用的bits。

   UCS    UTF-8
    0000 -     007F | 0xxxxxxx
    0080 -     07FF | 110xxxxx 10xxxxxx
    0800 -     FFFF | 1110xxxx 10xxxxxx 10xxxxxx
   10000 -   1FFFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
200000 - 3FFFFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
4000000 - 7FFFFFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


    例如字符“汜”,在unicode里的编码为十六进制的6C5C,范围在0800-FFFF之间,所以取模板1110xxxx 10xxxxxx 10xxxxxx(也就是说,“汜”为三字节的宽字符),“汜”的编码换算成二进制(0110110001011100)後代入模板,得 1110[0110] 10[110001] 10[011100]。中括号里的数字,连接起来就是该字符的unicode编码的二进制表示。

    再例如字符“@”,在Uinicode里的编码是十进制的64,范围在0000-007F之间,所以取模板0xxxxxxx。“@”的编码换算成二进制(1000000)後代入模板,得0[1000000]。它在计算机里的存储方式和ASKII的“@”是一样的。这就是为什么utf-8是兼容ascii的原因。


----------3. UTF-16----------

    UTF-16是一个不兼容ASKII的Unicode传输存储格式,一个UTF-16字符在BMP里总是两字节的,也就是16个bits的。例如字符“@”,它的Unicode编码的二进制表示是1000000,在高位补满16个0,得0000000001000000,这就是“@”Unicode 编码的UTF-16的二进制表示了。因为UTF-16不兼容ascii,而在计算机的世界里存在着大量以ASCII方式存储的数据,所以,现在UTF- 16并没有在文本处理领域里得到广泛使用。因为UTF-16在BMP总是两个字节,所以比起UTF-8,在存储中日韩字符的时候,相同的文本,需要的存储空间比较少。但是存储英文资料的时候,则比UTF-8需要更多的存储空间。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值