为什么长度为“Níðhöggr”9?

时间:2013-05-27 19:15:44

标签: haskell unicode

为什么length函数说这8个字符的字符串是9个字符?

>>> length "Níðhöggr"
9

2 个答案:

答案 0 :(得分: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字符(í是分割整数i和一个组合重音)。那将是分解正常形式(NFD)。

Google“Unicode规范化”,用于提供有趣和/或毛茸茸的细节。使用this function来规范化Haskell中的Unicode数据(感谢Adam Rosenfield!)。

答案 1 :(得分:21)

因为不是单个字符ö(U + 00F6 LATIN SMALL LETTER O WITH DIAERESIS);它的U + 006F拉丁文小写字母加上U + 0308结合了DIAERESIS。