【发布时间】:2018-02-07 08:42:45
【问题描述】:
作为支持 unicode 的 C++ 开发人员,委婉地说,是一件很头疼的事。 Unicode 有一些不幸的属性,使得很难确定字母的大小写、转换它们或几乎任何东西,除了识别单个已知的代码点左右(可能是也可能不是字母)。对于那些不幸没有内置语言(即 C 和 C++)的 unicode 支持的人来说,唯一真正的拯救似乎是 ICU。对其他语言的 unicode 的支持可能不够好,也可能不够好。
所以,我想,必须有一个 真正的 替代 unicode!即,除了具有查找数据结构(树、表等)以及识别字符之间的关系之外,还允许轻松识别字符类的编码?我怀疑对于大多数文本来说,任何这样的编码都可能是多字节的——这对我来说并不是一个真正的问题,但我接受它是给其他人的。提供这样的编码需要做很多工作,所以我真的不希望存在任何这样的编码????。
【问题讨论】:
-
我不确定我理解什么是痛苦;它是特定于 C++ 的东西吗? Unicode 为每个字符定义了一个属性类别,告诉您它是否是字母,是大写还是小写或根本不区分大小写等等。它还提供了定义大写/小写相关性等的表格。一定要找到它访问这些信息很麻烦,或者它是否困扰您甚至存在不加大小写的字母之类的东西?
-
我什至没有考虑过不加壳的字母。令我困扰的是,我无法查看字符(一串字节)而只查看几位并知道它与另一个字节串共享的类集,而没有大量数据。我明确地必须检查每个类的两个字符。 ASCII 可能是这个问题的主要原因。
i例如;根据语言环境,它可以转换为各种大写字符,而不仅仅是I。 -
你混合了两件事。
i的大写版本依赖于语言环境的问题与 Unicode 或 ASCII 无关——你不得不责怪 Kemal Atatürk 在一百年前发明了İ。 -
我同意能够在没有表格的情况下从数字代码点中分辨出类别会很好。但是以可扩展的方式设计这样的编码会很棘手 - 正如您可能知道的那样,每年都会向 Unicode 添加新字符。
-
无论如何,我认为没有任何方法可以将一个字符普遍映射到另一种情况,因为每种语言都有自己的方法来映射字符大小写,就像您已经看到的 i 示例一样。此外,Unicode 在每个代码点like this 中有很多标志,并且不可能以紧凑的方式存储它们。 Case mapping on Unicode is hard
标签: unicode