\1083\1099\1090\1076\1099\1073\1088

Dec 06, 2014 15:55

Поучаствовал вчера в ежемесячном микро-развлекалове, выступив, внезапно, с хаскелем.

Код мой там, конечно, получился лолшто, но мне простительно. Но вернёмся лучше к срачу про юникод :) Как там это было: "В 2014 году говорить об юникоде!" ©.

Prelude> putStrLn "привет, я юникод ( Read more... )

unicode, utf-8, haskell

Leave a comment

Comments 15

kurilka December 6 2014, 15:34:00 UTC
swizard December 6 2014, 16:04:00 UTC
Да, но почему? "read" не умеет читать неэкранированный utf8?

Reply

kurilka December 6 2014, 16:31:58 UTC
В хаддоке речь про Haskell source-language escape conventions судя по всему речь про "Haskell uses the Unicode [11] character set. However, source programs are currently biased toward the ASCII character set used in earlier versions of Haskell." из . Most of the details may be skipped in a first reading of the report. из https://www.haskell.org/onlinereport/lexemes.html
В 2010 обратная совместимость - https://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-150002.1

Reply


Всё правильно сделали! dmytrish December 6 2014, 17:27:24 UTC
В этом есть логика: можно посмотреть и структуру String (из чего она реально состоит, code points), и как она будет выглядеть при human interaction (character, который в Unicode вовсе не равнозначен code point):

Prelude> "привет, я юнико́т"
"\1087\1088\1080\1074\1077\1090, \1103 \1102\1085\1080\1082\1086\769\1090"
Prelude> putStrLn "привет, я юнико́т"
привет, я юнико́т

P.S. Ну а с дебагом - есть же repl, в конце-концов, можно и скопировать в putStrLn.

Reply

Re: Всё правильно сделали! swizard December 6 2014, 17:35:53 UTC
То, про что ты говоришь, это уже не "show", это "serialize" :)

Нет никаких объективных причин экранировать все символы, чей codepoint длиннее одного байта. Какие-то -- возможно, но тупо все -- это слишком US-centric, напоминает семибитную кодировку в smtp.

Reply

Re: Всё правильно сделали! dmytrish December 6 2014, 17:42:44 UTC
Ну, я привел пример объективной причины экранировать: о́ ("\1086\769"), ó ("\111\769"), ó ("\243") - это все один и тот же символ, представленный разными code points. И дебажить программу, в которой по какой-то причине две похожие кракозябли оказались представленными по-разному, лучше так, а если code point выводится как символ - значит он железно ASCII.

Reply

Re: Всё правильно сделали! swizard December 6 2014, 17:53:53 UTC
Ну так мне же никто не мешает поставить диакритику над латинской "o", давай тогда и её через \111 печатать, может? :)

Иначе, чем эта латинская "o" лучше нашей "Щ", например?

Reply


dmzlj December 7 2014, 15:04:08 UTC
а, точно. но может, это нормально?

Reply


Leave a comment

Up