【发布时间】:2016-01-16 22:35:56
【问题描述】:
在comparing strings 的快速文档中,我发现了以下内容:
两个字符串值(或两个字符值)被认为是相等的,如果 它们的扩展字素簇在规范上是等效的。 已扩展 如果它们具有相同的字素簇,则它们是规范等价的 语言意义和外观,即使它们是由 幕后不同的 Unicode 标量。
然后文档继续以下示例,该示例显示了两个“规范等效”的字符串
例如,带有 ACUTE (U+00E9) 的拉丁小写字母 E 是规范的 相当于拉丁文小写字母 E (U+0065) 后跟 COMBINING 重音 (U+0301)。这两个扩展的字素簇都是 表示字符 é 的有效方法,因此它们被认为是 规范等价:
好的。不知何故,e 和 é 看起来一样,并且具有相同的语言含义。当然我会给他们那个。我曾经上过西班牙语课,教授对我们是否使用e 的任何一种形式都不太严格,所以我猜这就是他们所指的。很公平
文档进一步显示了两个不规范等效的字符串:
反之,拉丁文大写字母 A(U+0041,或“A”),用于 英语,不等同于西里尔大写字母 A(U+0410,或 "А"),如俄语所用。这些角色在视觉上相似,但确实 不同的语言含义:
现在警报响起,我决定问这个问题。看起来与外观无关,因为这两个字符串看起来完全相同相同,并且他们在文档中也承认了这一点。所以看来string类真正要找的是linguistic meaning?
这就是为什么我问具有相同/不同语言含义的字符串是什么意思,因为e是我知道的e的唯一形式,主要用于英文,但我只见过@ 987654330@ 用于法语或西班牙语等语言,那么为什么假定А 用于俄语而A 用于英语,是什么导致字符串类说它们不等价?
我希望我能够引导您完成我的思考过程,现在我的问题是两个字符串具有相同的语言含义是什么意思(如果可能的话在代码中)?
【问题讨论】:
-
规范等价在 Unicode 标准 Annex #15 和 Section 3.11 中定义。如果两个字符串具有相同的规范表示,则它们在规范上是等价的。
-
@jonrsharpe 错过了这一点。谢谢
-
你没有从反例中得到什么,用两种不同的方式得到é?
-
代码中相同的语言含义...“走开”==“嘘!”
-
问题已得到解答。这是 Unicode。规范等价在 Unicode 下在技术上是明确定义的。故事结局。您或许可以责怪 Apple 的文档试图解释这个 Unicode 概念,而不是仅仅将您参考 Unicode 文档。但是没有什么可问或争论的;这是一个显而易见的事实。
标签: string swift unicode string-comparison