Подтвердить что ты не робот

Почему длина "Níðhöggr" 9?

Почему функция length говорит, что эта 8-символьная строка имеет 9 символов?

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

Ответ 1

"Níðhöggr" содержит 9 символов Юникода:

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).

Google "Нормализация Юникода" для интересных и/или волосатых деталей. Используйте эту функцию, чтобы нормализовать данные Unicode в Haskell (спасибо, Адам Розенфилд!).

Ответ 2

Поскольку ваш не является единственным символом ö (U + 00F6 LATIN SMALL LETTER O WITH DIAERESIS); это U + 006F LATIN SMALL LETTER O plus U + 0308 КОМБИНИРОВАННАЯ ДИАВЕРСИЯ.