作为支持unicode的C ++开发人员,温和地说,是一个痛苦的屁股。 Unicode有一些不幸的属性,这使得很难确定一个字母的情况,转换它们或几乎任何东西,除了识别一个已知的代码点左右(可能是也可能不是一个字母)。对于那些不幸在语言中没有内置unicode支持的人来说,唯一真正的拯救是ICU(即C和C ++)。支持其他语言的unicode可能也可能不够好。
所以,我想,必须有一个真正的替代unicode!即一种允许轻松识别字符类的编码,除了具有查找数据结构(树,表,等等),并识别字符之间的关系?我怀疑对于大多数文本来说任何这样的编码都可能是多字节的 - 这对我来说并不是一个真正的问题,但我接受它适用于其他人。提供这样的编码是很多工作,所以我真的不希望存在任何这样的编码。
答案 0 :(得分:2)
简短回答:不是我知道的。
作为一名非C ++开发人员,我不知道具体的是什么是关于Unicode的痛苦,但由于你没有用C ++标记问题,我仍然敢于尝试答案。
虽然我个人对Unicode一般非常满意,但我同意某些方面很麻烦。 如果从头开始重新设计Unicode,其中一些可以说可以改进,例如。通过删除一些冗余,如“拉丁希腊语”数字字母,除了实际的希腊字母(但这也会破坏与旧编码的兼容性)。
但大多数“痛苦”只是反映了写作的混乱用法。 你自己提到大写“i”的问题,其中一些是“我”,其他拼写中有“İ”,但是还有很多其他的困难 - 例如。德语“ß”,它是小写的,但没有大写等价物(好吧,它现在有,但很少使用);或在最终位置看起来不同的字母(希腊语“σ”/“ς”);或者带有倒置意义的引语(“法国风格”与“瑞士风格”,“英语”与“德国风格”)...我可以继续一段时间。
我没有看到编码如何帮助解决这个问题,除了提供字符属性,等价和关系表,这是Unicode所做的。
你在评论中说,通过查看编码字符的字节,你希望它告诉你它是大写还是小写。
对我来说,这听起来像是在说:“当我看一个数字时,我想让它告诉我它是不是最重要的。”
我的意思是,即使ASCII代码告诉你它们是大写还是小写,你只记住属性表,它告诉你41..5A
是上限,61..7A
是小写。
但是很难记住或硬编码所有120k Unicode码点的这些范围。所以最简单的方法就是使用查表。
对于“编码”的含义也存在一些混淆。 Unicode没有定义任何字节表示,它只分配代码点,即。整数,字符定义,它维护所述表。 严格意义上的编码(“编解码器”)是转换格式(UTF-8等),它们定义了代码点与其字节表示之间的映射。 现在可以定义一个新的UTF,它以一种为大/小写提供模式的方式将代码点映射到字节。 但这可能是什么? 上部奇怪,即使是小写? 但是没有大/小写区别的字母呢? 然后,不是字母的字符? 那么所有其他字符类别 - 标点符号,数字,空格,符号,组合变音符号 - 为什么不代表那些呢? 您可以将每个放在预定义的范围内,但如果将其中一个类别中添加了太多新字符会发生什么?
总结一下:我认为你的要求是不可能的。