ẞ
(Unicode U+1E9E
)被正式采用——至少作为德语中全大写单词的子集的一个选项:
< p > < em > 在那一年的6月,德语正字法委员会正式通过了一项规定,即⟨ẞ⟩将成为除先前的⟨SS⟩外的另一种大写⟨ß⟩的选项(即变体STRASSE和STRAẞE将被视为同样有效)。2
看起来,德语中的这种补充将极大地简化字符串之间的大小写比较(所谓的“折叠大小写”或“折叠大小写”比较)。请注意,我开始这个调查是为了理解Raku(又名Perl6)的实现,但实际上这个问题似乎适用于其他编程语言。这是Raku的默认实现-从rfdr_Regeln_2017.pdf开始,已经通过Raku的.lc
函数转换为小写的13个单词:
~$ cat TO_ẞ_OR_NOT_TO_ẞ.txt
maß straße grieß spieß groß grüßen außen außer draußen strauß beißen fleiß heißen
~$ raku -ne '.words>>.match(/^ <:Ll>+ $/).say;' TO_ẞ_OR_NOT_TO_ẞ.txt
(「maß」 「straße」 「grieß」 「spieß」 「groß」 「grüßen」 「außen」 「außer」 「draußen」 「strauß」 「beißen」 「fleiß」 「heißen」)
~$ raku -ne '.uc.say;' TO_ẞ_OR_NOT_TO_ẞ.txt
MASS STRASSE GRIESS SPIESS GROSS GRÜSSEN AUSSEN AUSSER DRAUSSEN STRAUSS BEISSEN FLEISS HEISSEN
~$ raku -ne '.fc.say;' TO_ẞ_OR_NOT_TO_ẞ.txt
mass strasse griess spiess gross grüssen aussen ausser draussen strauss beissen fleiss heissen
我很惊讶Raku的
fc
折叠实现基本上转换为小写ss
。那么尝试在大小写“round-tripped”单词和原始单词之间搜索eq
字符串相等性,则所有结果都为False
。~$ raku -ne 'for .words {print $_.uc.lc eq $_.lc }; "".put;' TO_ẞ_OR_NOT_TO_ẞ.txt
FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
折叠大小写(.fc
)单词匹配,但是基于ss
字符而不是ß
:
~$ raku -ne 'for .words {print $_.uc.lc eq $_.fc }; "".put;' TO_ẞ_OR_NOT_TO_ẞ.txt
TrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrue
从一个大写的ẞ开始,再次只取一个大写单词就展示了二分法:
~$ echo "straße STRASSE STRAẞE" | raku -ne ' .put for .words;'
straße
STRASSE
STRAẞE
~$ echo "straße STRASSE STRAẞE" | raku -ne ' .lc.say for .words;'
straße
strasse
straße
~$ echo "straße STRASSE STRAẞE" | raku -ne ' for .words { say $_.lc eq "straße" };'
True
False
True
~$ echo "straße STRASSE STRAẞE" | raku -ne ' for .words { say $_.lc eq $_.fc };'
False
True
False
有哪些编程语言默认实现了小写 ß
<--> 大写 ẞ
的 foldcase
转换?哪些编程语言通过选项(或库)添加了小写 ß
<--> 大写 ẞ
转换?许多 StackOverflow 上的问题/答案都早于 2017 年的决定,因此我正在寻找最新的答案。
[补充说明:我注意到通过这个 FAQ,Unicode 协会的规则似乎与德语正字法委员会在 2017 年的决定不一致]。
ẞ
决定与编程语言、其实现和 MoarVM 的评论。 - raiph