作为一个支持 unicode 的 C++ 开发人员,温和地说,是一件很痛苦的事情。Unicode 有一些不幸的属性,使得确定字母的大小写、转换字母或识别单个已知代码点等(可能是也可能不是字母)之外的几乎任何事情都变得非常困难。对于那些不幸没有内置 Unicode 支持的语言(即 C 和 C++)的人来说,唯一真正的救援似乎是ICU 。对其他语言的 unicode 支持可能不够好,也可能不够好。
所以,我想,一定有一个真正的unicode 替代品!即,除了具有查找数据结构(树、表等)并识别字符之间的关系之外,还可以轻松识别字符类的编码?我怀疑对于大多数文本来说,任何此类编码都可能是多字节的——这对我来说并不是真正关心的问题,但我承认这对其他人来说也是如此。提供这样的编码需要大量工作,因此我并不真正期望存在任何这样的编码。
简短回答:据我所知没有。
\n\n作为一个非 C++ 开发人员,我不知道 Unicode 到底有什么痛苦,但既然你没有用 C++ 标记这个问题,我仍然敢于尝试回答。
\n\n虽然我个人对 Unicode 总体上非常满意,但我同意某些方面很麻烦。\n如果从头开始重新设计 Unicode,其中一些可以说是可以改进的,例如。除了实际的希腊字母之外,还删除了一些冗余,例如“拉丁希腊语”数学字母(但这也会破坏与旧编码的兼容性)。
\n\n但大多数“痛苦”只是首先反映了书写的混乱用法。\n你提到自己大写“i”的问题,在某些拼字法中是“I”,在其他拼字法中是“\xc4\xb0”,但是还有大量其他困难 \xe2\x80\x93 例如。德语“\xc3\x9f”,是小写字母,但没有对应的大写字母(嗯,现在有,但很少使用);或最终位置看起来不同的字母(希腊语“\xcf\x83”/“\xcf\x82”);或含义相反的引号(\xc2\xab法语风格\xc2\xbb vs. \xc2\xbb瑞士风格\xc2\xab、\xe2\x80\x9cEnglish\xe2\x80\x9d vs. \xe2\x80\x9e德语风格\xe2 \x80\x9c)...我可以继续一段时间。
\n\n除了提供字符属性、等价性和关系表(这就是 Unicode 的作用)之外,我不知道编码可以如何帮助解决这个问题。\n您在评论中说,通过查看编码字符的字节,你希望它告诉你它是大写还是小写。\n对我来说,这听起来像是在说:“当我查看一个数字时,我希望它告诉我它是否是素数。”\n我的意思是,甚至 ASCII 代码都没有告诉你它们是大写还是小写,你只是记住了属性表,它告诉你41..5A是大写61..7A还是小写。\n但是很难记住或硬编码所有 120k Unicode 代码点的这些范围。所以最简单的就是使用查表。
对于“编码”的含义也存在一些混乱。\nUnicode 没有定义任何字节表示形式,它只分配代码点,即。整数到字符定义,并且它维护所述表。\n严格意义上的编码(“编解码器”)是转换格式(UTF-8 等),它定义代码点与其字节表示之间的映射。\n现在可以定义一个新的 UTF,以提供大写/小写模式的方式将代码点映射到字节。\n但是那会是什么?\n大写是奇数,小写也是奇数?\n但是没有字母的情况又如何呢?大写/小写区别?\n然后,不是字母的字符?\n那么所有其他字符类别 \xe2\x80\x93 标点符号、数字、空格、符号、组合变音符号 \xe2\x80\ x93,为什么不也表示这些?\n您可以将每个字符放入预定义的范围内,但如果将太多新字符添加到其中一个类别中,会发生什么情况?
\n\n总结一下:我认为你的要求是不可能的。
\n| 归档时间: |
|
| 查看次数: |
4620 次 |
| 最近记录: |