UTF-48

编码→编辑→编译,停留在最初阶段……

1、UTF-32/3

一个汉字的信息量约等于三个英文字母
举例来说:
I’m a painter,13
我是一个粉刷匠,7

The amount of information in a Chinese character is about equal to three English letters,88
一个汉字的信息量约等于三个英文字母,17

Transforms the different translation way,40
转换不同的翻译方式,9

Apples and oranges,18
苹果和桔子,5

13:7=1.86
88:17=5.18
40:9=4.44
18:5=3.6
一个汉字的信息量约等于三个英文字母

采用32比特编码,全世界有5651种语言,用32比特表示3个英文字母。
2^32/5651=76万
76万^(1/3)=91
对英语来说,有91个码位可用。

你好,谢谢,再见,6
こんにちは、ありがとう、さようなら,15
15:6=2.5
一个汉字的信息量约等于2个日文假名

用4字节表示一个汉字?许多人可能接受不了,现在的GBK或UTF-16用2字节表示一个汉字,UTF-8也才是3字节。

美国人也会提出异议,这样编码后,用着不如UTF-8方便,还要编码、解码,切换起来费时费力。

本方案的出发点是,让各种语言尽可能有相同长度的编码。这只是存储用的编码,计算机内码依然可以用16比特。用32比特表示3个字母,约是11比特表示1个字母,这套方案可以命名为UTF-32/3。

2、UTF-48

方案一:UTF-32/3
4字节表示1个汉字,或3个字母。

方案二:UTF-48
6字节表示2个汉字,或5个字母。

理论计算:
汉字10万个,16.61比特
英文字母128-32=96个,6.59比特
16.61:6.59=2.52倍
5:2=2.5倍

工程上,比特数向上取整:

  • 5651种语言,需要13比特;
  • 10万汉字,需要17比特;
  • ASCII编码,需要7比特;

13+1+17+17=48,连续两个汉字
13+7+7+7+7+7=48,连续五个英文字母

上述方案一,编码、解码需要做多个乘除法,速度较慢;方案二,直接做位运算,速度较快。但是面对阿拉伯语,有8比特编码,该怎么办呢?
13+3+8+8+8+8=48
6字节表示4个阿拉伯字母?

那日语假名呢?因为一个汉字相当于2个假名,所以也是6字节表示2个汉字、4个假名吗?167个日语假名,需要8比特。

第二段的2比特有4种情况,分别对应以下4行:
‌13+2+17+8+8,一个汉字带两个假名
‌13+2+8+8+17,
‌13+2+8+17+8,
‌13+2+1+8+8+8+8,连续四个假名
日文中出现连续两个汉字,就用汉语模式。

汉语和ASCII字符混合模式:
13+1+17+17=48,连续两个汉字
13+1+3+17+7+7=48,一个汉字加两个ASCII
13+1+3+7+17+7=48,ASCII汉字ASCII
13+1+3+7+7+17=48,两个ASCII加一个汉字
第三段的3比特有8种情况,还有5个码位待定。

几天前写的那篇博客,描述了UTF-24/2和UTF-32word,现简述如下:

3、UTF-24/2

用3字节表示1个汉字,或2个字母。
(2^24/5651)^(1/2)=54
每种语言只有54个码位,偏少。

4、UTF-32word

用4字节表示一个词,以单词为单位编码。
‌2^32/5651=76万
‌13+19=32,2^19=52万
不管是76万还是52万,都足够多了。

英语中有sun,汉语中有太阳,且尽量保证它们的编码相似。
编码器、解码器太大。一个英语单词可以有多个意思,难以保证像sun和太阳那样对应整齐。英语单词正在增长,76万或52万都不够用,要看英语国家的人们是怎么说的了。

总结

本文描述了UTF-32/3,UTF-48,UTF-24/2,UTF-32word这四种字符编码。推荐使用UTF-48编码。

分配方式

因为35=7×5,安排7比特是方便的,不多也不少,正好35比特。

如果是8比特呢?35=3+8×4,有3比特剩余,计算有多少剩余的码位:7×232=7/8×235=0.875项(1项=235码位)

如果是9比特呢?35+1=9×4,这相当于“借1比特”,需要合并2项。

借更多比特需要合并更多项,比如13比特编码,35+4=13×3,这需要借4比特,即合并24=16项。

有没有足够多的项可供合并呢?一般来说,没有!因为全世界有5651种语言,分配了13比特,即8192项,平均1.4项/语言。

因为35=3+8×4,8比特编码的语言有3比特剩余。8个这样的语言可以合并到一个项里,可以理解成这里的3比特,合并进入lang字段。8个语言占1项,那么,1.4×8-1=10.2,有10项可以释放出来,供其他语言使用。

上述操作可以称为“借比特”与“还比特”。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值