为什么length函数说这8个字符的字符串是9个字符?
>>> length "Níðho?ggr"
9
Pet*_*rin 63
"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字符(í是分割int i和组合重音).这将被分解为正常形式(NFD).
谷歌"Unicode规范化"有趣和/或毛茸茸的细节.使用此函数来规范化Haskell中的Unicode数据(感谢Adam Rosenfield!).
Cai*_*von 21
因为你o?不是单个字符ö(U + 00F6 LATIN SMALL LETTER O WITH DIAERESIS); 这是U + 006F LATIN小写字母O加上U + 0308组合DIAERESIS.