Unicode 编码

Unicode 是用于计算机处理的文本的表示的通用字符集编码标准。通过给每个字符一个编号,程序员可以创造不同的字符编码集,让计算机在同一个文件或程序中存储、处理和传输任何语言组合。如果没有正确标明数据的字符集,其它程序和计算机就会错误地显示该文本(乱码),或者在处理过程中损坏文本。Unicode 只规定了每个字符的编号,编号是十进制的,UTF-32、UTF-8、UTF-16(Unicode Transformation Formats) 则给出了如何存储这些编号,存储形式则是二进制,也就是说 Unicode 是字符集,UTF-x 是字符集编码。

字符编码过程:Grapheme → Code Point \underset{decode}{\overset{encode}{\leftrightharpoons }} Code Unit

  • Grapheme,字位/字素,人类写作系统的简单单元、书写单位
  • Code Point,码位/码点,码位是一个数值,Grapheme 图形映射到一个或多个码位
  • Code Unit,码元,二进制编码

ASCII,西文字符编码,只有一种编码策略,将字符映射到 1 字节。ASCII 中 1 字位就是 1 字节,而 Unicode中,1 字位可能对应多个码位,1 个码位可能对应多个字节。

Unicode 的编码策略:

  • UTF-32,定长字符编码,将每个码位转为 4 字节的码元,造成空间浪费。
  • UTF-8,可变长度字符编码,将每个码位映射到 1~4 字节之间,码位尺寸与码元字节不等,这样使得索引定位它们更加困难,也对性能有些影响。可以向后兼容 ASCII 编码。
  • UTF-16,变长字符编码,每个码位被编码为 1~2 个 16 bit 的码元。在 Unicode 基本多文种平面定义的字符(无论是拉丁字母、汉字或其他文字或符号),一律使用 2 字节储存。而在辅助平面定义的字符,会以代理对(surrogate pair)的形式,以两个 2 字节的值来储存。UTF-16比起 UTF-8,好处在于大部分字符都以固定长度的字节(2 字节)储存,但UTF-16却无法兼容于 ASCII 编码。

不同的编码策略可能将同一码位编码成不同的码元。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值