字符串编码encoding

字符串编码:

ASCII:占用一个字节,8个比特,规定最高位0,所以最多支持127个字符(字母、数字、一些符号);

GB2312:中国制定,为了汉字的表示;

为了多个国家的语言表示进化出Unicode编码:

Unicode:定义了世界上几乎所有字符,两个字节,16bit,为了支持更多语言,但是很多字符用不到两个字节,存储到硬盘或网站上时比ASCII码多占用一倍空间;

UTF(Unicode的转换格式,Unicode Translation Formats):通常所说的编码方式,UTF-32、UTF-16、UTF-8

码点:Unicode给字符串的编码,为一串二进制数;

码元:切分这个二进制数的方法(一个码元通常为8bit、16bit、32bit)

Unicode 编码发展到今天扩展到了 21 位,为啥扩展到 21 位了呢?因为一开始老美只考虑自己那 26 个英文字母和数字,随着越来越多的国家的语言语言编码,Unicode 不得继续扩展,目前 21 位已经足够使用。

UTF-32:码元32bit,每32位去读一下码点,而码点是 Unicode 给字符的编码,前面也说了,最长才 21 位,因此每一个 UTF-32 值都可以直接表示对应的码点。(缺点:每个字符占用4个字节太浪费空间)

编码空间:前面说了 Unicode ,它是 21 位的。这 21 位提供了 1,114,112 个码点,编码空间就是对应这 1,114,112 个码点。这么多码点并不代表有这么多字符,目前大概只有 10% 的空间被使用了,人类社会还没创造出 1,114,112 这么多的字符。

编码空间被分成 17 个平面(plane),每个平面有 65,536 个字符(正好填充 2 个字节,16 位)。
0 号平面叫做“基本多文种平面”(BMP, Basic Multilingual Plane),涵盖了几乎所有你能遇到的字符,除了 emoji(emoji 位于 1 号平面 - -)。
其它平面叫做补充平面,大多是空的。

UTF-16:最常见,码元16bit,每16bit去读一下码点,直到读取完成,BMP 平面(也就是前面说的基本多文种平面)中的每一个码点都直接与一个 UTF-16 的码元一一映射。由于 BMP 几乎包括了所有常见字符,UTF-16 一般需要 UTF-32 大约一半的空间。至于其它平面里很少使用的码点都是用两个 16 位的码元来编码的。

UTF-8:可变长变短的编码。码元8~32bit,
从 0 到 127 的这些码点直接映射成 1 个字节(对于只包含这个范围字符的文本来说,这一点使得 UTF-8 和 ASCII 完全相同)。接下来的 1,920 个码点映射成 2 个字节,在 BMP 里所有剩下的码点需要 3 个字节。
Unicode 的其他平面里的码点则需要 4 个字节。
UTF-8 是基于 8 位的码元的,因此它并不需要关心字节顺序(因为字节就是 8 位的呀,其它 UTF-16 和 UTF-32 在不同的机器编译环境下需要考虑字节的顺序问题)。                        

UTF-8是存储和交流Unicode文本方面的最佳编码。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值