Первое, на что я натолкнулся, начав изучать Эрланг - это проблемы со строками, отягощенные всей юникодностью нашего алфавита. Пожалуй, будь моим родным языком английский (или латынь или любой другой с алфавитом, полностью помещающимся в первые 128 символов utf-8), часть проблем бы я просто не заметил, и даже считал, что так оно и должно быть и я
(
Read more... )
Нет, я говорил про обычные строки, которые списком. Именно в них следует держать текст при процессинге.
Но в этом случае мы лишаемся некоторых возможностей
Ничего мы такого не лишаемся, чего получаем, храня code points в списках. Подробнее здесь: http://lionet.livejournal.com/56779.html
И не возникнет ли у нас новый вид ошибок поиска - когда заматчатся половины букв? Скажем второй байт первого символа и первый байт второго?
Хранение в code points этой проблемы не решает. Подробнее здесь: http://lionet.livejournal.com/56779.html в частности, см. про combining characters.
А как вы вводите бинари с русскими символами в текст программы?
Честно говоря, не вводим. Код пишем на эрланге, комментарии на английском, а локализация - она вне программы, в отдельных сущностях (база или файлы).
Если я пишу в консоли Msg2 = <<"абв"/utf8>>, то получаю ошибку
Это меня самого раздражает.
который содержит бред, но по счастливой случай правильно отображается на экране.
Почему же это бред? Это UTF-8, именно так и должно быть.
Reply
Значит я вас неверно понял. Меня сильно смущает оверхед на хранение и обработку - что нам постоянно надо "бегать" по указателям для любых операций.
> Ничего мы такого не лишаемся, чего получаем, храня code points в списках.
Если список, то да - нам должны быть доступны все списковые операции и модуль string тоже.
> Если я пишу в консоли Msg2 = <<"абв"/utf8>>, то получаю ошибку
> Это меня самого раздражает.
Можно ли как-то с этим бороться? Чтобы поведение было одинаковым? Иначе очень не удобно - нельзя отладить программу в консоли, быстро проверить какую-нибудь мысль и т.п.
> Почему же это бред? Это UTF-8, именно так и должно быть.
Да, это utf-8. Но запись не соответствует EEP-10. По идее должны быть либо code point в списке, либо в виде байт бинарного объекта.
А такая запись - гибрид, который неясно как обрабатывать. Как например, ему сделать uppercase?
Reply
Leave a comment