根据 Wikipedia,在 2017 年,使用大写字母
ẞ
(Unicode U+1E9E
)被正式采用——至少作为一种选择——因为实际上可能是德语中全大写单词的一个子集:
同年 6 月,德国正字法委员会正式通过了一项规则,即除了之前的大写形式 ⟨SS⟩ 之外,⟨ẞ⟩ 将成为大写 ⟨ß⟩ 的选项(即变体 STRASSE 和 STRAẞE 将被同等接受有效)。2
德语的这一新增功能似乎会大大简化字符串之间的大小写比较(即“折叠大小写”比较)。请注意,我开始这个查询是为了了解 Raku(又名 Perl6)的实现,但实际上这个问题似乎可以推广到其他编程语言。这是 Raku 的默认实现——从 rfdr_Regeln_2017.pdf 的 13 个单词开始,这些单词已经小写(通过 Raku 的
.lc
函数):
~$ 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
。毫不奇怪,尝试在上/下“往返”单词和原始单词之间搜索 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 年的决定,所以我正在寻找最新的答案。