为什么length
函数说这个 8 个字符的字符串是 9 个字符?
>>> length "Níðhöggr"
9
“Níðhöggr”包含 9 个 Unicode 字符:
U+004E N (Lu): LATIN CAPITAL LETTER N
U+00ED í (Ll): LATIN SMALL LETTER I WITH ACUTE
U+00F0 ð (Ll): LATIN SMALL LETTER ETH
U+0068 h (Ll): LATIN SMALL LETTER H
U+006F o (Ll): LATIN SMALL LETTER O
U+0308 ̈ (Mn): COMBINING DIAERESIS
U+0067 g (Ll): LATIN SMALL LETTER G
U+0067 g (Ll): LATIN SMALL LETTER G
U+0072 r (Ll): LATIN SMALL LETTER R
您可能想要使用“Níðhöggr”,它在打印出来时看起来相同,但包含U+00F6 LATIN SMALL LETTER O WITH DIAERESIS
而不是两个字符的 ö 组合。换句话说,它是复合标准形式(NFC)。
或者您可能想要“Níðhöggr”,它有 10 个 Unicode 字符(í 是拆分 inti
和组合重音符号)。那将是分解的范式(NFD)。
谷歌“Unicode 规范化”以获得有趣和/或毛茸茸的细节。使用此函数在 Haskell 中规范化 Unicode 数据(感谢 Adam Rosenfield!)。
因为您ö
不是单个字符ö
(U+00F6 拉丁小写字母 O 带分音符号);它是 U+006F 拉丁小写字母 O 加上 U+0308 组合分音符。