【问题标题】:What does it mean that two strings have the same linguistic meaning?两个字符串具有相同的语言含义是什么意思?
【发布时间】: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 #15Section 3.11 中定义。如果两个字符串具有相同的规范表示,则它们在规范上是等价的。
  • @jonrsharpe 错过了这一点。谢谢
  • 你没有从反例中得到什么,用两种不同的方式得到é?
  • 代码中相同的语言含义...“走开”==“嘘!”
  • 问题已得到解答。这是 Unicode。规范等价在 Unicode 下在技术上是明确定义的。故事结局。您或许可以责怪 Apple 的文档试图解释这个 Unicode 概念,而不是仅仅将您参考 Unicode 文档。但是没有什么可问或争论的;这是一个显而易见的事实。

标签: string swift unicode string-comparison


【解决方案1】:

你说:

不知何故,e 和 é 看起来一样,并且具有相同的语言含义。

没有。你误读了文件。又是这个文件:

LATIN SMALL LETTER E WITH ACUTE (U+00E9) 在规范上等同于 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] 拉丁文、希腊文和西里尔文的统一编码会使套管操作变得一团糟……”

阅读技术说明了解完整详情。

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 2020-06-29
    • 2018-05-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2020-10-30
    相关资源
    最近更新 更多