为什么 "ss" 等于德语升号 s 字符 'ß'?
Why is "ss" equal to the German sharp-s character 'ß'?
来自 I'm wondering why ä
and ae
are different(which makes sense) but ß
and ss
are treated as equal. I haven't found an answer on SO even if this question 似乎是相关的,甚至提到了 "that ß
will compare equal to SS
in Germany, or similar" 但不是为什么。
我在 MSDN 上找到的唯一资源是:How to: Compare Strings
这里提到了以下但也缺少 为什么:
// "They dance in the street."
// Linguistically (in Windows), "ss" is equal to
// the German essetz: 'ß' character in both en-US and de-DE cultures.
.....
那么为什么这个计算结果为 true
,无论是 de-DE
文化还是任何其他文化:
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
因为德国人就是这样定义自己的语言的。或者也许最准确:那些为德语定义 sorting/collation 的人如何定义德国人如何定义德语。
在很大程度上,英语反对 i
的大写是 I
,但其他使用拉丁字母的语言(例如土耳其语)不同意。
一些背景信息供您参考。 Taken from here.
Windows 替代代码
在 Windows 中,ALT 键加数字代码的组合可用于在任何 Windows 应用程序中键入非英语字符(重音字母或标点符号)。提供了有关使用 ALT 键键入重音符号的更多详细说明。在 Windows 中输入重音的其他选项也列在该网站的重音部分。
注意:字母 ü、ö、ä 和 ß 可以分别用 "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"(国际音标:[ɛsˈtsɛt])或 "scharfes S",在英语中称为 "sharp S",是一个辅音,演变为连字"long s and z" (ſz) 和 "long s over round s" (ſs)。说话时发音为 [s](见国际音标)。自1996年德国正字法改革以来,它只用在长元音和双元音之后,而ss写在短元音之后。 eszett 这个名字来自两个字母 S 和 Z,因为它们在德语中的发音。它也被称为scharfes S(国际音标:德语:[ˈʃaɐ̯.fəs ˈʔɛs, ˈʃaː.fəs ˈʔɛs],意思是"sharp S"。它的Unicode编码是U+00DF。
在德语中 ß
字符(仅以小写形式存在)听起来像 ss
。它的用法不时发生变化,许多人混淆 ß
和 ss
。如果我们用大写字母写 Fuß
(英尺)这样的词,我们会写成 FUSS
。如果键盘或字体不支持 ß
我们写 ss
并且它(几乎,大部分)是正确的。
这可以解释为什么 ß
和 ss
在排序时被视为等价的。
如果您查看 Ä 页面,您会发现 Ä 并非总是 Æ(或 ae)的替代品,它仍然在各种语言中使用。
字母ß改为:
While the letter "ß" has been used in other languages, it is now only used in German. However, it is not used in Switzerland, Liechtenstein or Namibia.[1] German speakers in Germany, Austria, Belgium,[2] Denmark,[3] Luxembourg[4] and South Tyrol, Italy[5] follow the standard rules for ß.
所以 ß 在单一语言中使用,具有单一规则 (ß == ss),而 Ä 在多种语言中使用,具有多个规则。
请注意,考虑到 case folding 是:
Case folding is primarily used for caseless comparison of text, such as identifiers in a computer program, rather than actual text transformation
官方 Unicode 7.0 Case Folding Properties 告诉我们
00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
其中 00DF 是 ß,0073 是 s,所以可以考虑 ß,为了不区分大小写的比较,作为 ss。
一些背景事实:
在瑞士德语中,eszet 在 70 年代已经被 ss 取代,我认为
对于大写转换,官方的德语替换规则一直是并且仍然是 eszet->SS,即使几年前已经为 unicode (U+1E9E) 定义了大写 eszet。我从来没有在野外的任何地方见过它!
三个元音变音 äöü 一直有正确的大写版本 ÄÖÜ 除非您没有它们,否则没有进行或不需要这样的更改和替换。将它们替换为 ae,oe,ue 只是一种解决方法,不过,并不比用 beta 或 'B'..
替换 eszet 好多少
所以不同的比较结果至少有一定的意义,尽管治疗,尤其是排序在德国之间并不是真正可靠地统一,比如字典或 phone 书籍、列表、索引等。
我在这里读到的大部分内容都是真实的。但是这里有一些误解,所以——作为一个德国人——让我直截了当地说:
ß/ẞ 是一个真正的德语字母,来自 ſs 或 ſz 的连字,但绝不是 ss。即长 s 后跟 s 或 z。
德语中音节 s 的发音为 /z/,而首尾音节 s 的发音为 /s/。由于德语中的字母 z 始终发音为 /ts/,它需要一种方法来区分那些罕见的情况,在这些情况下,通过添加另一个字母并最终为这些情况形成连字来打破该规则,其中一个中间音节发音为 /s/需要。
发音 /s/ 从来没有出现在 genuin 德语单词的开头,只出现在一个外来词中,它是 (tada!) 用 sz: Szene 写的。因此,大写 ß (ẞ) 的需要首先出现是因为整个单词的大写开始使用。 ß 和 ss 不 相同,历史上 ſz 和 ß 是,这就是为什么它被称为 "eszett"!有一些规则允许 ß 到 ss 翻译如果 ß 不可用,这在现代环境中是不正确的。
Maße 的正确大写是 MAẞE,Masse 的正确大写是 MASSE。两者在德语中是不同的词。
因此,在实际的德语中,ss 是 /s/ 之前的短元音,而 ß 是 /s/ 之后的长元音。假设 ss 和 ß 在任何比较中都相等是完全错误的,因为它可能会强制完全不同含义的词相等。期间.
再等半个世纪。
今年,经过一个多世纪的争论,德语正式添加 ẞ
作为小写版本 ß
的有效大写替代。人们还需要一段时间才能习惯新的大写形式 ẞ
,但一旦大写版本 ẞ
占据主导地位,就没有理由继续这种邪恶
String.Equals("Mr. Meißner", "Mr. Meissner", StringComparison.CurrentCulture) == true;
破解。
从 .Net 5.0 开始,这些比较现在 returns -1
/NotEqual。详情见https://docs.microsoft.com/en-us/dotnet/core/compatibility/globalization/5.0/icu-globalization-api
来自 ä
and ae
are different(which makes sense) but ß
and ss
are treated as equal. I haven't found an answer on SO even if this question 似乎是相关的,甚至提到了 "that ß
will compare equal to SS
in Germany, or similar" 但不是为什么。
我在 MSDN 上找到的唯一资源是:How to: Compare Strings
这里提到了以下但也缺少 为什么:
// "They dance in the street."
// Linguistically (in Windows), "ss" is equal to
// the German essetz: 'ß' character in both en-US and de-DE cultures.
.....
那么为什么这个计算结果为 true
,无论是 de-DE
文化还是任何其他文化:
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
因为德国人就是这样定义自己的语言的。或者也许最准确:那些为德语定义 sorting/collation 的人如何定义德国人如何定义德语。
在很大程度上,英语反对 i
的大写是 I
,但其他使用拉丁字母的语言(例如土耳其语)不同意。
一些背景信息供您参考。 Taken from here.
Windows 替代代码
在 Windows 中,ALT 键加数字代码的组合可用于在任何 Windows 应用程序中键入非英语字符(重音字母或标点符号)。提供了有关使用 ALT 键键入重音符号的更多详细说明。在 Windows 中输入重音的其他选项也列在该网站的重音部分。
注意:字母 ü、ö、ä 和 ß 可以分别用 "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"(国际音标:[ɛsˈtsɛt])或 "scharfes S",在英语中称为 "sharp S",是一个辅音,演变为连字"long s and z" (ſz) 和 "long s over round s" (ſs)。说话时发音为 [s](见国际音标)。自1996年德国正字法改革以来,它只用在长元音和双元音之后,而ss写在短元音之后。 eszett 这个名字来自两个字母 S 和 Z,因为它们在德语中的发音。它也被称为scharfes S(国际音标:德语:[ˈʃaɐ̯.fəs ˈʔɛs, ˈʃaː.fəs ˈʔɛs],意思是"sharp S"。它的Unicode编码是U+00DF。
在德语中 ß
字符(仅以小写形式存在)听起来像 ss
。它的用法不时发生变化,许多人混淆 ß
和 ss
。如果我们用大写字母写 Fuß
(英尺)这样的词,我们会写成 FUSS
。如果键盘或字体不支持 ß
我们写 ss
并且它(几乎,大部分)是正确的。
这可以解释为什么 ß
和 ss
在排序时被视为等价的。
如果您查看 Ä 页面,您会发现 Ä 并非总是 Æ(或 ae)的替代品,它仍然在各种语言中使用。
字母ß改为:
While the letter "ß" has been used in other languages, it is now only used in German. However, it is not used in Switzerland, Liechtenstein or Namibia.[1] German speakers in Germany, Austria, Belgium,[2] Denmark,[3] Luxembourg[4] and South Tyrol, Italy[5] follow the standard rules for ß.
所以 ß 在单一语言中使用,具有单一规则 (ß == ss),而 Ä 在多种语言中使用,具有多个规则。
请注意,考虑到 case folding 是:
Case folding is primarily used for caseless comparison of text, such as identifiers in a computer program, rather than actual text transformation
官方 Unicode 7.0 Case Folding Properties 告诉我们
00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
其中 00DF 是 ß,0073 是 s,所以可以考虑 ß,为了不区分大小写的比较,作为 ss。
一些背景事实:
在瑞士德语中,eszet 在 70 年代已经被 ss 取代,我认为
对于大写转换,官方的德语替换规则一直是并且仍然是 eszet->SS,即使几年前已经为 unicode (U+1E9E) 定义了大写 eszet。我从来没有在野外的任何地方见过它!
三个元音变音 äöü 一直有正确的大写版本 ÄÖÜ 除非您没有它们,否则没有进行或不需要这样的更改和替换。将它们替换为 ae,oe,ue 只是一种解决方法,不过,并不比用 beta 或 'B'..
替换 eszet 好多少
所以不同的比较结果至少有一定的意义,尽管治疗,尤其是排序在德国之间并不是真正可靠地统一,比如字典或 phone 书籍、列表、索引等。
我在这里读到的大部分内容都是真实的。但是这里有一些误解,所以——作为一个德国人——让我直截了当地说:
ß/ẞ 是一个真正的德语字母,来自 ſs 或 ſz 的连字,但绝不是 ss。即长 s 后跟 s 或 z。
德语中音节 s 的发音为 /z/,而首尾音节 s 的发音为 /s/。由于德语中的字母 z 始终发音为 /ts/,它需要一种方法来区分那些罕见的情况,在这些情况下,通过添加另一个字母并最终为这些情况形成连字来打破该规则,其中一个中间音节发音为 /s/需要。
发音 /s/ 从来没有出现在 genuin 德语单词的开头,只出现在一个外来词中,它是 (tada!) 用 sz: Szene 写的。因此,大写 ß (ẞ) 的需要首先出现是因为整个单词的大写开始使用。 ß 和 ss 不 相同,历史上 ſz 和 ß 是,这就是为什么它被称为 "eszett"!有一些规则允许 ß 到 ss 翻译如果 ß 不可用,这在现代环境中是不正确的。
Maße 的正确大写是 MAẞE,Masse 的正确大写是 MASSE。两者在德语中是不同的词。
因此,在实际的德语中,ss 是 /s/ 之前的短元音,而 ß 是 /s/ 之后的长元音。假设 ss 和 ß 在任何比较中都相等是完全错误的,因为它可能会强制完全不同含义的词相等。期间.
再等半个世纪。
今年,经过一个多世纪的争论,德语正式添加 ẞ
作为小写版本 ß
的有效大写替代。人们还需要一段时间才能习惯新的大写形式 ẞ
,但一旦大写版本 ẞ
占据主导地位,就没有理由继续这种邪恶
String.Equals("Mr. Meißner", "Mr. Meissner", StringComparison.CurrentCulture) == true;
破解。
从 .Net 5.0 开始,这些比较现在 returns -1
/NotEqual。详情见https://docs.microsoft.com/en-us/dotnet/core/compatibility/globalization/5.0/icu-globalization-api