设想中的UTF-64编码

为了不成为技术的奴隶,需要保留一些幻想。

现有的UTF包括UTF-8、UTF-16、UTF-32。

若使用UTF-8,英语短,俄语长。
若使用UTF-16,汉语短,英语、俄语都很长。
希望找到一种方法,让不同语言表达相同的意思,所产生的编码长度不要差太多。
于是便有了UTF-64编码的设想。

不同语言表示相同的意思

def f(string):
    x=bytes(string, 'utf-8')
    y=bytes(string, 'utf-16')
    print(len(x),len(y))
    
a1='Let different words express the same meaning, and the required encoding length be close to the same.'
a2='让不同文字表达相同意思,所需编码长度接近相同。'
a3='Пусть разные тексты выражают одно и то же значение, требуемая длина кодирования близка к одной и той же.'
f(a1)
f(a2)
f(a3)

运行结果为:

100 202
69 48
189 210

用英语、汉语、俄语表示相同的意思,需要的编码长度相差很多。

UTF-64的编码方式

nnn a F C
nnn a FF Z C

nnn是3比特数字,表示所在的64比特中,记录着多少个字符。
F是unicode分区编号,有157区,用8比特表示。

对于一个F的情况,后边的52比特储存着7个7比特,或6个8比特,……或3个15比特。根据F的值,查表决定单位长度是几比特。若F=1,则是ASCII码,取7比特。若F=115,则是基本汉字,取15比特。

对于两个F的情况,后边的Z储存着字符属于哪个分区(用0和1区分),以及字符本身。

F=1,ASCII码,7比特
F=115,基本汉字,15比特
F=238,BMP字符,16比特
F=239,第一辅助平面字符,16比特
F=254,第十六辅助平面字符,16比特
F=255,全unicode字符,21比特

unicode编码范围

0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic Latin)
  0080-00FF:C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement)
  0100-017F:拉丁文扩展-A (Latin Extended-A)
  0180-024F:拉丁文扩展-B (Latin Extended-B)
  0250-02AF:国际音标扩展 (IPA Extensions)
  02B0-02FF:空白修饰字母 (Spacing Modifiers)
  0300-036F:结合用读音符号 (Combining Diacritics Marks)
  0370-03FF:希腊文及科普特文 (Greek and Coptic)
0400-04FF:西里尔字母 (Cyrillic)
  0500-052F:西里尔字母补充 (Cyrillic Supplement)
  0530-058F:亚美尼亚语 (Armenian)
  0590-05FF:希伯来文 (Hebrew)
  0600-06FF:阿拉伯文 (Arabic)
  0700-074F:叙利亚文 (Syriac)
  0750-077F:阿拉伯文补充 (Arabic Supplement)
  0780-07BF:马尔代夫语 (Thaana)
  07C0-077F:西非书面语言 (N’Ko)
  0800-085F:阿维斯塔语及巴列维语 (Avestan and Pahlavi)
  0860-087F:曼达语 (Mandaic)
  0880-08AF:撒马利亚语 (Samaritan)
  0900-097F:天城文书 (Devanagari)
  0980-09FF:孟加拉语 (Bengali)
  0A00-0A7F:锡克教文 (Gurmukhi)
  0A80-0AFF:古吉拉特文 (Gujarati)
  0B00-0B7F:奥里亚文 (Oriya)
  0B80-0BFF:泰米尔文 (Tamil)
  0C00-0C7F:泰卢固文 (Telugu)
  0C80-0CFF:卡纳达文 (Kannada)
  0D00-0D7F:德拉维族语 (Malayalam)
  0D80-0DFF:僧伽罗语 (Sinhala)
  0E00-0E7F:泰文 (Thai)
  0E80-0EFF:老挝文 (Lao)
  0F00-0FFF:藏文 (Tibetan)
  1000-109F:缅甸语 (Myanmar)
  10A0-10FF:格鲁吉亚语 (Georgian)
  1100-11FF:朝鲜文 (Hangul Jamo)
  1200-137F:埃塞俄比亚语 (Ethiopic)
  1380-139F:埃塞俄比亚语补充 (Ethiopic Supplement)
  13A0-13FF:切罗基语 (Cherokee)
  1400-167F:统一加拿大土著语音节 (Unified Canadian Aboriginal Syllabics)
  1680-169F:欧甘字母 (Ogham)
  16A0-16FF:如尼文 (Runic)
  1700-171F:塔加拉语 (Tagalog)
  1720-173F:哈努诺语(Hanunóo)
  1740-175F:部希德文字符(Buhid)
  1760-177F:塔格巴努亚文字符(Tagbanwa)
  1780-17FF:高棉语 (Khmer)
  1800-18AF:蒙古文 (Mongolian)
  18B0-18FF:沙姆(Cham)
  1900-194F:林布(Limbu)
  1950-197F:德宏泰语 (Tai Le)
  1980-19DF:新傣仂语 (New Tai Lue)
  19E0-19FF:高棉语记号 (Kmer Symbols)
  1A00-1A1F:布吉文(Buginese)
  1A20-1A5F:巴达克(Batak)
  1A80-1AEF:兰纳(Lanna)
  1B00-1B7F:巴厘语 (Balinese)
  1B80-1BB0:巽他语 (Sundanese)
  1BC0-1BFF:杨松录苗文(Pahawh Hmong)
  1C00-1C4F:雷布查语(Lepcha)
  1C50-1C7F:桑塔利文 (Ol Chiki)
  1C80-1CDF:曼尼普尔语 (Meithei/Manipuri)
  1D00-1D7F:语音学扩展 (Phonetic Extensions)
  1D80-1DBF:语音学扩展补充 (Phonetic ExtensionsSupplement)
  1DC0-1DFF:结合用读音符号补充 (Combining DiacriticsMarks Supplement)
  1E00-1EFF:拉丁文扩充附加 (Latin Extended Additional)
  1F00-1FFF:希腊语扩充 (Greek Extended)
  2000-206F:常用标点 (General Punctuation)
  2070-209F:上标及下标 (Superscripts and Subscripts)
  20A0-20CF:货币符号 (Currency Symbols)
  20D0-20FF:组合用记号 (Combining Diacritics Marksfor Symbols)
  2100-214F:字母式符号 (Letterlike Symbols)
  2150-218F:数字形式 (Number Form)
  2190-21FF:箭头 (Arrows)
  2200-22FF:数学运算符 (Mathematical Operator)
  2300-23FF:杂项工业符号 (Miscellaneous Technical)
  2400-243F:控制图片 (Control Pictures)
  2440-245F:光学识别符 (Optical Character Recognition)
  2460-24FF:封闭式字母数字 (Enclosed Alphanumerics)
  2500-257F:制表符 (Box Drawing)
  2580-259F:方块元素 (Block Element)
  25A0-25FF:几何图形 (Geometric Shapes)
  2600-26FF:杂项符号 (Miscellaneous Symbols)
  2700-27BF:印刷符号 (Dingbats)
  27C0-27EF:杂项数学符号-A (MiscellaneousMathematical Symbols-A)
  27F0-27FF:追加箭头-A (Supplemental Arrows-A)
  2800-28FF:盲文点字模型 (Braille Patterns)
  2900-297F:追加箭头-B (Supplemental Arrows-B)
  2980-29FF:杂项数学符号-B (MiscellaneousMathematical Symbols-B)
  2A00-2AFF:追加数学运算符 (Supplemental MathematicalOperator)
  2B00-2BFF:杂项符号和箭头 (Miscellaneous Symbols andArrows)
  2C00-2C5F:格拉哥里字母 (Glagolitic)
  2C60-2C7F:拉丁文扩展-C (Latin Extended-C)
  2C80-2CFF:古埃及语 (Coptic)
  2D00-2D2F:格鲁吉亚语补充 (Georgian Supplement)
  2D30-2D7F:提非纳文 (Tifinagh)
  2D80-2DDF:埃塞俄比亚语扩展 (Ethiopic Extended)
  2E00-2E7F:追加标点 (Supplemental Punctuation)
  2E80-2EFF:CJK 部首补充 (CJK Radicals Supplement)
  2F00-2FDF:康熙字典部首 (Kangxi Radicals)
  2FF0-2FFF:表意文字描述符 (Ideographic DescriptionCharacters)
  3000-303F:CJK 符号和标点 (CJKSymbols and Punctuation)
  3040-309F:日文平假名 (Hiragana)
  30A0-30FF:日文片假名 (Katakana)
  3100-312F:注音字母 (Bopomofo)
  3130-318F:朝鲜文兼容字母 (Hangul Compatibility Jamo)
  3190-319F:象形字注释标志 (Kanbun)
  31A0-31BF:注音字母扩展 (Bopomofo Extended)
  31C0-31EF:CJK 笔画 (CJK Strokes)
  31F0-31FF:日文片假名语音扩展 (Katakana PhoneticExtensions)
  3200-32FF:封闭式 CJK 文字和月份 (Enclosed CJK Letters andMonths)
  3300-33FF:CJK 兼容 (CJK Compatibility)
  3400-4DBF:CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A)
  4DC0-4DFF:易经六十四卦符号 (Yijing Hexagrams Symbols)
  4E00-9FBF:CJK 统一表意符号,中文字符 (CJK Unified Ideographs)
  A000-A48F:彝文音节 (Yi Syllables)
  A490-A4CF:彝文字根 (Yi Radicals)
  A500-A61F:瓦伊语(Vai)
  A660-A6FF:统一加拿大土著语音节补充 (Unified CanadianAboriginal Syllabics Supplement)
  A700-A71F:声调修饰字母 (Modifier Tone Letters)
  A720-A7FF:拉丁文扩展-D (Latin Extended-D)
  A800-A82F:锡尔赫特文 (Syloti Nagri)
  A840-A87F:八思巴字 (Phags-pa)
  A880-A8DF:索拉什特拉(Saurashtra)
  A900-A97F:爪哇语 (Javanese)
  A980-A9DF:查克玛语(Chakma)
  AA00-AA3F:Varang Kshiti
  AA40-AA6F:Sorang Sompeng
  AA80-AADF:尼瓦尔语 (Newari)
  AB00-AB5F:越南傣语 (Vietnam Thai)
  AB80-ABA0:克耶字母 (Kayah Li)
  AC00-D7AF:朝鲜文音节 (Hangul Syllables)
  D800-DBFF:高半区UTF-16(High-half zone of UTF-16)
  DC00-DFFF:低半区UTF-16(Low-half zone of UTF-16)
  E000-F8FF:自行使用区域 (Private Use Zone)
  F900-FAFF:CJK 兼容象形文字 (CJK Compatibility Ideographs)
  FB00-FB4F:字母表达形式 (Alphabetic Presentation Form)
  FB50-FDFF:阿拉伯表达形式A (Arabic PresentationForm-A)
  FE00-FE0F:变量选择符 (Variation Selector)
  FE10-FE1F:竖排形式 (Vertical Forms)
  FE20-FE2F:组合用半符号(Combining Half Marks)
  FE30-FE4F:CJK 兼容形式 (CJKCompatibility Forms)
  FE50-FE6F:小型变体形式 (Small Form Variants)
  FE70-FEFF:阿拉伯表达形式B (Arabic PresentationForm-B)
  FF00-FFEF:半型及全型形式 (Halfwidth and FullwidthForm)
  FFF0-FFFF:特殊 (Specials)
10300…1032F;Old Italic
10330…1034F; Gothic
10400…1044F; Deseret
1D000…1D0FF; Byzantine Musical Symbols
1D100…1D1FF; Musical Symbols
1D400…1D7FF; Mathematical Alphanumeric Symbols
20000…2A6D6; CJK Unified Ideographs Extension B
2F800…2FA1F; CJK Compatibility Ideographs Supplement
E0000…E007F; Tags
F0000…FFFFD;Private Use
100000…10FFFD; Private Use

举例

存储“甲A,”

nnn=3个=011
a=1
F=238(BMP字符)

记录为:
011 1 (238) ‘甲’ ‘A’ ‘,’ 0000

总结

不管用UTF-8还是UTF-16,不同语言表示相同意思,所产生的编码长度相差较大,所以就有了UTF-64的想法。用64比特表示7个英文字母,或3个汉字。由语言的特性不同,所产生的编码长度仍未完全一样,但也比之前好了许多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值