在comparing strings的快速文档中,我发现了以下内容:
如果,则认为两个字符串值(或两个字符值)相等 他们扩展的字形簇在规范上是等价的。的 扩展 如果石墨烯簇具有相同的,则它们在规范上是等价的 语言意义和外观 ,即使它们是由...组成的 幕后不同的Unicode标量。
然后文档继续下面的示例,其中显示了两个“cannonically equivalent”的字符串
例如,带有ACUTE(U + 00E9)的LATIN SMALL LETTER E是规范的 相当于LATIN SMALL LETTER E(U + 0065),然后是COMBINING ACUTE ACCENT(U + 0301)。这些扩展的石墨烯簇都是 有效的方式来表示角色é,因此他们被认为是 在规范上等同于:
确定。不知何故,e
和é
看起来相同,并且具有相同的语言含义。当然,我会给他们。我有时参加过西班牙语课程,而且教授对于我们是否使用e
的任何形式都不是太严格,所以我猜这是他们所指的。足够公平
文档进一步展示了两个在规范上不等同的字符串:
相反,LATIN CAPITAL LETTER A(U + 0041,或“A”),用于 英语,不等于CYRILLIC CAPITAL LETTER A(U + 0410,或 “А”),俄语中使用的。角色在视觉上是相似的,但确实如此 没有相同的语言意义:
现在这里是警钟响起的地方,我决定问这个问题。看起来外观与它无关,因为两个字符串看起来完全完全相同,并且他们也在文档中承认这一点。所以字符串类真正需要的是linguistic meaning
?
这就是为什么我问具有相同/不同语言含义的字符串意味着什么,因为e
是我知道的e
唯一主要用于英语的形式,但是我只看到é
被用在法语或西班牙语等语言中,那么为什么А
用于俄语而A
用于英语,是导致字符串的原因上课说他们不等同?
我希望我能够引导您完成我的思考过程,现在我的问题是两个字符串具有相同的语言含义是什么意思(如果可能,在代码中)?
答案 0 :(得分:3)
你说:
不知何故,e和é看起来一样,并且具有相同的语言意义。
没有。你误读了这个文件。这是文件:
带有ACUTE(U + 00E9)的拉丁文小写字母E在规范上等同于LATIN SMALL LETTER E(U + 0065),然后是COMBINING ACUTE ACCENT(U + 0301)。
这是U + 00E9:é
这是U + 0065:e
这是U + 0301:'
这是U + 0065,然后是U + 0301:é
所以U + 00E9(é)的外观和含义与U + 0065 U + 0301(é)相同。因此,他们必须被视为平等。
那么为什么西里尔语与拉丁语A不同呢? UTN #26有几个原因。以下是一些:
“传统的笔迹学一直将它们视为不同的脚本,......”
“拉丁文,希腊文和西里尔字母的文化用户没有文化惯例,将对方的字母和字母视为自己书写系统的一部分。”
“更重要的是,从信息技术中数字文本表示的字符编码问题的角度来看,拉丁语,希腊语和西里尔语作为不同的脚本的预先存在的识别被转移到字符编码中,从最早的这种编码实例来看。“
“[A]拉丁文,希腊文和西里尔文的统一编码会使套管操作变得混乱,......”
阅读技术说明以获取完整的详细信息。