Unicode,UTF-8,UTF-16,UTF-32各是什么,以及它们之间的关系

  1. Unicode(统一码、万国码、单一码)是计算机科学领域的一项业界标准,包括字符集、编码方式等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
    因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理,但要表示中文,一个字节是不够的,为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,就不会再有乱码问题了。
  2. 在Unicode中,我们有很多方式将数字表示成程序中的数据,包括:UTF-8、UTF-16、UTF、-32。UTF是“Unicode Transformation Format”法缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。
  3. UTF-8以字节为单位对Unicode进行编码。从Unicode到UTF-8的编码方式如下:
Unicode编码(十六进制)UTF-8字节流(二进制)
000000-00007F0xxxxxxx
000080-0007FF110xxxxx 10xxxxxx
000800-00FFFF1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是4个字节。从上表可以看出,4字节模板有21个x,即可以容纳21位二进制数字。Unicode的最大码位0x10FFFF也只有21位。

  1. UTF-16编码以16位无符号整数为单位。
    在基本多语言平面内的码位UTF-16编码使用1个码元且其值与Unicode是相等的(不需要转换)。举例如下:
Unicode字符UTF-16(码元)UTF-16 LE(字节)UTF-16 BE(字节)
U+0041A0x00410x41 0x000x00 0x41
U+78340x78340x34 0x780x78 0x34
U+66530x66530x53 0x660x66 0x53
  1. UTF-32是一种定长编码,使用1个32bit的码元,其值与Unicode编码值相等。举例如下:
Unicode字符UTF-32(码元)UTF-32 LE(字节)UTF-32 BE(字节)
U+0041A0x000000410x41 0x00 0x00 0x000x00 0x00 0x00 0x41
U+78340x000078340x34 0x78 0x00 0x000x00 0x00 0x78 0x34
U+66530x000066530x53 0x66 0x00 0x000x00 0x00 0x66 0x53
U+2A6A5?(四个龍)0x0002A6A50xA5 0xA6 0x02 0x000x00 0x02 0xA6 0xA5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值