为什么“ss”等同于德语sharp-s字符“ß”?

35
这个问题中得知,我想知道为什么 äae 是不同的(这很有意义),但是 ßss 被视为相等。即使在这个问题中似乎有关联,并且甚至提到"在德国,或类似地区,ß会与SS相等" ,但我在SO上没有找到答案。

我找到的唯一MSDN资源是这个:如何:比较字符串

这里提到了以下内容,但也缺少了为什么:

// "They dance in the street." 
// Linguistically (in Windows), "ss" is equal to 
// the German essetz: 'ß' character in both en-US and de-DE cultures. 
.....

那么为什么无论是使用 de-DE 的区域设置还是其他任何区域设置,以下代码都会计算为 true 呢:

var ci = new CultureInfo("de-DE");
int result = ci.CompareInfo.Compare("strasse", "straße", CompareOptions.IgnoreNonSpace); // 0
bool equals = String.Equals("strasse", "straße", StringComparison.CurrentCulture); // true
equals = String.Equals("strasse", "straße", StringComparison.InvariantCulture);  // true

4
我想这可能是由于1996年德语正字法改革所致。 - Fabrizio Calderan
1
@FabrizioCalderan 这是不太可能的。正字法改革改变了使用 ß 和不使用的规则,但仅限于此。在正确的德语正字法中仍需要在某些情况下使用 ß(与以前一样),除非您使用瑞士正字法(与以前一样),如果由于某种原因您无法使用 ß,则仍然将 ss 视为默认替换(与以前一样)。 - Uwe
@Tobias81:为什么在你的情况下使用SortedList是不可能的呢? - Tim Schmelter
如果我添加两个被视为相等的单词(例如下面的示例中的“Busse+Buße”),SortedList.Add将抛出异常。在我的情况下,这发生在从文件系统读取文件名时。 - Tobias81
@Tobias81:但我认为你的第二个例子不太好。考虑到只允许一个单词,而且你不能有两个“Fluß”,系统不允许“Fluss”这个词,这难道不好吗?因为从语言学角度来看,“Fluss”就是同一个单词。 - Tim Schmelter
显示剩余6条评论
8个回答

29
如果你查看Ä页面,你会发现Ä并不总是替代Æ(或ae),它仍被用于多种语言。
另一方面,字母ß
尽管字母“ß”曾在其他语言中使用过,但现在仅在德语中使用。 然而,在瑞士,列支敦士登或纳米比亚不使用它。德语使用者在德国、奥地利、比利时、丹麦、卢森堡和意大利南蒂罗尔州遵循ß的标准规则(ß == ss)。
因此,“ß”仅在单一语言中使用,具有单一规则(ß==ss),而“Ä”在多种语言中使用,具有多个规则。
请注意,考虑到大小写折叠是:
大小写折叠主要用于文本的无大小写比较,例如计算机程序中的标识符,而不是实际的文本转换。
Unicode 7.0官方大小写折叠属性告诉我们:
00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
这里,00DF是ß,0073是s,所以ß在无大小写比较时可以视为ss。

Maße/Masse(尺寸/质量)是可以容易混淆的词汇,但我认为没有其他类似的例子。 - TaW
1
@TaW Busse/Buße(公交车/罚款)和可能的Geschoss/Geschoß(楼层/子弹) - sloth
@sloth,是或者不是:这些不容易混淆,因为上下文会让人明白哪一个是指的。 - TaW
1
如果你是一个人,那么理解上下文是很容易的。但是对于机器来说,可能会有些问题。@TaW - Vortex852456
https://www.unicode.org/Public/UNIDATA/CaseFolding.txt - jubilatious1

3

请等待半个世纪。

经过一个多世纪的争议,德语正式将 作为小写字母版本 ß 的有效大写替代品添加进来。人们需要一些时间来适应新的大写形式 ,但是一旦大写版本 占据主导地位,就没有继续使用这种邪恶的理由了。

String.Equals("Mr. Meißner", "Mr. Meissner", StringComparison.CurrentCulture) == true;

黑客。


1
这里是关于这个变化的官方规则集。在我看来,整件事从一开始就没有意义。SSSZ也许可以理解,但是自从我上学(97年)起,sssz就是错误的简单用法了。 - Christian Gollhardt
@ChristianGollhardt,看起来该页面已经移至此处:https://web.archive.org/web/20170706162042/http://www.rechtschreibrat.com/DOX/rfdr_Regeln_2017.pdf# - jubilatious1

3

这里有一些背景信息。 来源在这里。

Windows Alt Codes

在Windows中,可以使用ALT键加数字代码的组合,在任何Windows应用程序中输入非英语字符(重音字母或标点符号)。关于使用ALT键输入重音符号的更详细说明可在此网站的Accents部分中找到。在Windows中输入重音符号的其他选项也列在该网站的Accents部分中。

注意:字母ü、ö、ä和ß可以分别替换为"ue"、"oe"、"ae"或"ss"。

德语ALT代码

Sym Windows ALT Code

Ä   ALT+0196
ä   ALT+0228
Ö   ALT+0214
ö   ALT+0246
Ü   ALT+0220
ü   ALT+0252
ß   ALT+0223
€   ALT+0128

在德语字母表中,字母ß被称为“Eszett”(IPA:[ɛsˈtsɛt])或“scharfes S”,在英语中称为“sharp S”,它是一个辅音字母,由“长s和z”(ſz)和“长s覆盖圆s”(ſs)的连字体演变而来。说话时发音为[s](见IPA)。自1996年德国正字法改革以来,它只用于长元音和双元音后,而短元音后则写作ss。Eszett这个名字来源于S和Z两个字母在德语中的发音。它也被称为“scharfes S”(IPA:[ˈʃaɐ̯.fəs ˈʔɛs,ˈʃaː.fəs ˈʔɛs]),意思是“尖S”。它的Unicode编码是U+00DF。

本文摘自此处。


3

我读到的大部分内容都是正确的。但是有一些误解存在,所以作为一个德国人,让我来澄清一下:

ß / ẞ 是一个真正的德语字母,由 ſs 或 ſz 的连字体组成,而从不是 ss。即长 s 后跟 s 或 z。

在德语中,单词中间的 s 发音为 /z/,而起始和结束音节的 s 发音为 /s/。由于德语中的字母 z 总是发音为 /ts/,因此它需要一种方法来区分那些更少见的情况,在这些情况下需要添加另一个字母,并最终形成那个连字体,以满足需要中间音节声音 /s/ 的情况。

在真正的德语单词中,声音 /s/ 从未出现在开头,只有一个外来词,其中它(tada!)用 sz 写作:Szene。因此,首字母大写 ß(ẞ)的需求首先出现在整个单词的大写使用中。历史上,ß 和 ss 不同,ſz 和 ß 相同,这就是为什么它被称为“eszett”!如果没有 ß,则有某些规则允许 ß 转换为 ss,而在现代环境中这是不正确的。

Maße 的正确大写形式是 MAẞE,而 Masse 的正确大写形式是 MASSE。这两个词在德语中是不同的单词。

因此,在实际德语中,ss 是短元音 /s/,而 ß 是长元音后的 /s/。假设 ss 和 ß 在任何比较中都相等是完全错误的,因为它可能会迫使具有完全不同含义的单词相等。结论。


2
一些背景信息:
  • 在瑞士德语中,Eszet在70年代被淘汰并用SS取代

  • 对于大写转换,官方的德语替换规则一直是Eszet->SS,即使几年前已经为Unicode定义了一个大写Eszet(U+1E9E)。我从未在任何地方见过它!

  • 三个变音符äöü没有必要做任何更改和替换,因为它们一直有正确的大写版本ÄÖÜ,除非你没有这些字母。用ae,oe,ue替换它们只是一个临时办法,不比用beta或B替换Eszet好多少。

因此,不同的比较结果至少有一些意义,尽管处理方式,特别是排序方面,在德国并不真正可靠地统一,例如词典、电话簿、列表、索引等。


我在任何地方都没有看到过它! - rhavin
啊,确实是这样。只有一个标志/名称,但仍然很不错。谢谢链接! - TaW

1

0

这是因为德国人定义他们自己的语言方式如此。或者更准确地说:那些为德语定义排序/整理方式的人已经定义了德国人如何定义德语。

就像英语规定大写字母 i I一样,而其他使用拉丁字母表的语言(例如土耳其语)则不同。


这并没有真正回答为什么在所有语言中ß被视为ss,而ä却不被视为ae - MakePeaceGreatAgain
3
在德语以外的地方,处理 ß 总是随意的,因为它始终源自德语(在任何非德语拼写中都不存在)。 - Richard

-1
在德语中,只有小写形式存在的字符ß发音类似于ss。它的使用会不时地改变,许多人会混淆ßss。如果我们将像Fuß(脚)这样的单词全部大写,我们会写成FUSS。如果键盘或字体不支持ß,我们会写成ss,这是(几乎,大部分)正确的。
这可能解释了为什么在排序时ßss被视为等效。

为什么 new CultureInfo("de-DE").CompareInfo.Compare("strasse", "straße") 返回 0 没有解释。 - Tim Schmelter
1
实际上,它不应该这样。这些不同的单词,应该排序相同。如果我大声读它们,它们甚至听起来不同(这就是为什么我们有一个ß)。 - DrKoch
很遗憾,自1996年以来就不再支持了(https://dev59.com/wl0a5IYBdhLWcg3w48BP#29846109)。 - Tim Schmelter
仅仅是小写字母是不正确的。正确的“Fuß”应该大写为“FUẞ”。 - rhavin
在现实世界中,当用户输入地址时,"strasse / straße" 是否可以互换使用?在自由文本搜索中,是否应该对 "strasse / straße" 进行词干处理? - dunxz
@dunxz 正确的词是"Straße",因为"a"是长音。从历史上看,它曾被写作"Straſze",请参考这里的链接:https://de.wikipedia.org/wiki/%C3%9F#/media/Datei:Berliner_Strassenschilder.jpg - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接