строковые литералы в unicode (utf-8)

200 views
Skip to first unread message

Sergey Avseyev

unread,
Sep 29, 2010, 4:18:32 AM9/29/10
to Erlang в России
привет.

как можно задать строковый или символьный литерал на русском
языке в коде? не смотря на то, что исходник в unicode компилятор
по-видимому использует latin-1 и портит все константы. хочу в eunit
задать expected значение. http://gist.github.com/602431

исходник в utf-8. пробовал utf-16 и utf-32, erlang не компилит их
я бы хотел для слова "привет" рассчитывать на список
[1087,1088,1080,1074,1077,1090]

Mikhail Gusarov

unread,
Sep 29, 2010, 4:24:27 AM9/29/10
to erlang-...@googlegroups.com

Twas brillig at 01:18:32 29.09.2010 UTC-07 when sergey....@gmail.com did gyre and gimble:

SA> исходник в utf-8. пробовал utf-16 и utf-32, erlang не компилит их я
SA> бы хотел для слова "привет" рассчитывать на список
SA> [1087,1088,1080,1074,1077,1090]

Это не UTF-8, это Unicode codepoints. Так что "\x{043F}\x{0440}..."

--
http://fossarchy.blogspot.com/

Sergey Avseyev

unread,
Sep 29, 2010, 4:28:21 AM9/29/10
to Erlang в России
> Это не UTF-8, это Unicode codepoints. Так что "\x{043F}\x{0440}..."
то есть более читаемым литерал сделать не получится?

Mikhail Gusarov

unread,
Sep 29, 2010, 4:36:21 AM9/29/10
to erlang-...@googlegroups.com

Twas brillig at 01:28:21 29.09.2010 UTC-07 when sergey....@gmail.com did gyre and gimble:

>> Это не UTF-8, это Unicode codepoints. Так что "\x{043F}\x{0440}..."
SA> то есть более читаемым литерал сделать не получится?

Похоже, пока никак. http://www.erlang.org/doc/apps/stdlib/unicode_usage.html#id58126

--
http://fossarchy.blogspot.com/

Sergey Avseyev

unread,
Sep 29, 2010, 4:41:00 AM9/29/10
to erlang-...@googlegroups.com
> Похоже, пока никак.

Понятно, спасибо

Иван

unread,
Sep 29, 2010, 5:22:33 AM9/29/10
to Erlang в России
-module(tt).
-export([test/0]).
test() ->
unicode:characters_to_list(list_to_binary("привет")).


1> c(tt).
{ok,tt}
2> tt:test().
[1087,1088,1080,1074,1077,1090]


On 29 сен, 11:18, Sergey Avseyev <sergey.avse...@gmail.com> wrote:
> привет.
>
> как можно задать строковый или символьный литерал на русском
> языке в коде? не смотря на то, что исходник в unicode компилятор
> по-видимому использует latin-1 и портит все константы. хочу в eunit

> задать expected значение.http://gist.github.com/602431

Sergey Avseyev

unread,
Sep 29, 2010, 5:41:19 AM9/29/10
to erlang-...@googlegroups.com
Спасибо, то что надо

2010/9/29 Иван <neh...@gmail.com>:

Mikhail Gusarov

unread,
Sep 29, 2010, 7:33:57 AM9/29/10
to erlang-...@googlegroups.com

Twas brillig at 02:22:33 29.09.2010 UTC-07 when neh...@gmail.com did gyre and gimble:

И> -module(tt).
И> -export([test/0]).
И> test() ->
И> unicode:characters_to_list(list_to_binary("привет")).

А как компилятор определяет кодировку? Или там utf-8 намертво зашито?

--
http://fossarchy.blogspot.com/

Kirill A. Korinskiy

unread,
Sep 29, 2010, 7:35:40 AM9/29/10
to erlang-...@googlegroups.com

2010/9/29 Mikhail Gusarov <dott...@dottedmag.net>


Twas brillig at 02:22:33 29.09.2010 UTC-07 when neh...@gmail.com did gyre and gimble:

 И> -module(tt).
 И> -export([test/0]).
 И> test() ->
 И>   unicode:characters_to_list(list_to_binary("привет")).

А как компилятор определяет кодировку? Или там utf-8 намертво зашито?


locale? 


--
wbr, Kirill

Mikhail Gusarov

unread,
Sep 29, 2010, 7:41:24 AM9/29/10
to erlang-...@googlegroups.com

Twas brillig at 15:35:40 29.09.2010 UTC+04 when ca...@catap.ru did gyre and gimble:

>> И> unicode:characters_to_list(list_to_binary("привет")).
>> А как компилятор определяет кодировку? Или там utf-8 намертво зашито?
KAK> locale?

Я пощупал с разными - ничего не меняется.

--
http://fossarchy.blogspot.com/

Sergey Avseyev

unread,
Sep 29, 2010, 8:44:40 AM9/29/10
to erlang-...@googlegroups.com
исходник всегда в latin-1 это написано по ссылке
http://www.erlang.org/doc/apps/stdlib/unicode_usage.html#id58126

поэтому русские символы просто идут как бинарные данные
--

Best regards,
Sergey Avseyev

2010/9/29 Mikhail Gusarov <dott...@dottedmag.net>:

Mikhail Gusarov

unread,
Sep 29, 2010, 8:52:09 AM9/29/10
to erlang-...@googlegroups.com

Twas brillig at 15:44:40 29.09.2010 UTC+03 when sergey....@gmail.com did gyre and gimble:

SA> исходник всегда в latin-1 это написано по ссылке
SA> http://www.erlang.org/doc/apps/stdlib/unicode_usage.html#id58126
SA> поэтому русские символы просто идут как бинарные данные

Какой, эээ, забавный хак (и хорошо, что в latin-1 все 256 значений байта
- допустимый символ). Получается, если codepoints не нужны, то можно
просто литералы писать, и не заботиться о конверии.

--
http://fossarchy.blogspot.com/

Valentin Nechayev

unread,
Sep 30, 2010, 1:49:42 AM9/30/10
to erlang-...@googlegroups.com
2010/9/29 Mikhail Gusarov <dott...@dottedmag.net>:

Я думаю, скоро таки придут к тому же варианту, что сейчас в Python и
ещё кое-где: в файле (несколько первых строк) ищется специальный
маркер входной кодировки, без него считается, что файл в кодировке по
умолчанию (скорее всего будет latin-1 для совместимости).

--
-netch-

Mikhail Gusarov

unread,
Sep 30, 2010, 1:54:40 AM9/30/10
to erlang-...@googlegroups.com

Twas brillig at 08:49:42 30.09.2010 UTC+03 when net...@gmail.com did gyre and gimble:

>> Какой, эээ, забавный хак (и хорошо, что в latin-1 все 256 значений байта
>> - допустимый символ). Получается, если codepoints не нужны, то можно
>> просто литералы писать, и не заботиться о конверии.

VN> Я думаю, скоро таки придут к тому же варианту, что сейчас в Python и
VN> ещё кое-где: в файле (несколько первых строк) ищется специальный
VN> маркер входной кодировки, без него считается, что файл в кодировке по
VN> умолчанию (скорее всего будет latin-1 для совместимости).

А нужно ли? Сейчас в строковый литерал можно любые бинарные данные
вставить, заэскейпив лишь кавычку и перевод строки, и получить,
собственно, эти бинарные данные строкой в коде.

Так ли нужны Unicode codepoints в Erlang? Это ж не string processing language.

--
http://fossarchy.blogspot.com/

Valentin Nechayev

unread,
Sep 30, 2010, 2:01:14 AM9/30/10
to erlang-...@googlegroups.com
2010/9/30 Mikhail Gusarov <dott...@dottedmag.net>:

>  >> Какой, эээ, забавный хак (и хорошо, что в latin-1 все 256 значений байта
>  >> - допустимый символ). Получается, если codepoints не нужны, то можно
>  >> просто литералы писать, и не заботиться о конверии.
>
>  VN> Я думаю, скоро таки придут к тому же варианту, что сейчас в Python и
>  VN> ещё кое-где: в файле (несколько первых строк) ищется специальный
>  VN> маркер входной кодировки, без него считается, что файл в кодировке по
>  VN> умолчанию (скорее всего будет latin-1 для совместимости).
>
> А нужно ли? Сейчас в строковый литерал можно любые бинарные данные
> вставить, заэскейпив лишь кавычку и перевод строки, и получить,
> собственно, эти бинарные данные строкой в коде.

И каждый раз писать все эти binary_to_unicode(list_to_binary())?

> Так ли нужны Unicode codepoints в Erlang? Это ж не string processing language.

И почему Erlang не имеет права качественно работать со строками (а не
с недосписками)?

--
-netch-

Alexander Dergachev

unread,
Sep 30, 2010, 2:35:56 AM9/30/10
to erlang-...@googlegroups.com
2010/9/30 Valentin Nechayev <net...@gmail.com>

2010/9/30 Mikhail Gusarov <dott...@dottedmag.net>:
>  >> Какой, эээ, забавный хак (и хорошо, что в latin-1 все 256 значений байта
>  >> - допустимый символ). Получается, если codepoints не нужны, то можно
>  >> просто литералы писать, и не заботиться о конверии.
>
>  VN> Я думаю, скоро таки придут к тому же варианту, что сейчас в Python и
>  VN> ещё кое-где: в файле (несколько первых строк) ищется специальный
>  VN> маркер входной кодировки, без него считается, что файл в кодировке по
>  VN> умолчанию (скорее всего будет latin-1 для совместимости).
>
> А нужно ли? Сейчас в строковый литерал можно любые бинарные данные
> вставить, заэскейпив лишь кавычку и перевод строки, и получить,
> собственно, эти бинарные данные строкой в коде.

И каждый раз писать все эти binary_to_unicode(list_to_binary())?

можно один раз определить макрос, и пользоваться им :)

 

> Так ли нужны Unicode codepoints в Erlang? Это ж не string processing language.

И почему Erlang не имеет права качественно работать со строками (а не
с недосписками)?

ну потому что приоритеты у разработчиков другие... так ли уж нужны эти "строки", и так ли уж плохи эти "недосписки"?
 

--
-netch-

--
Страница рассылки: http://groups.google.com/group/erlang-russian
 Jabber-конференция: erl...@conference.jabber.ru
 Новости: http://erlanger.ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com



--
With Best Regards,
Alexander Dergachev

Valentin Nechayev

unread,
Sep 30, 2010, 4:10:33 AM9/30/10
to erlang-...@googlegroups.com
2010/9/30 Alexander Dergachev <cy6er...@gmail.com>:

>> > Так ли нужны Unicode codepoints в Erlang? Это ж не string processing
>> > language.
>> И почему Erlang не имеет права качественно работать со строками (а не
>> с недосписками)?
> ну потому что приоритеты у разработчиков другие... так ли уж нужны эти
> "строки",

Само по себе введение модуля unicode достаточно показывает, что строки нужны.

> и так ли уж плохи эти "недосписки"?

Они ужасны и отвратительны.

--
-netch-

Mikhail Gusarov

unread,
Sep 30, 2010, 4:51:19 AM9/30/10
to erlang-...@googlegroups.com

Twas brillig at 09:01:14 30.09.2010 UTC+03 when net...@gmail.com did gyre and gimble:

VN> И каждый раз писать все эти binary_to_unicode(list_to_binary())?

Зачем? Оставить как бинарные данные.

Не текстовый процессор, чай, пишется, считать длину строки с учётом
суррогатов нечасто надо. Навскидку я могу только одно применение
вспомнить - XML DOM в терминах Unicode codepoints сформулирован, и
кодирование/раскодирование из потока байт при работе с ним удобнее
делать на границе системы.

>> Так ли нужны Unicode codepoints в Erlang? Это ж не string processing
>> language.

VN> И почему Erlang не имеет права качественно работать со строками (а
VN> не с недосписками)?

Да почему, имеет. Только для "качественной работы со строками" в этом
веке литералов явно недостаточно, нужна ещё характеризация символов,
нормализация, работа с combining chars, обработка bidi-строк, сравнение
с учётом локали, поиск, анализ word breaks, регэкспы, да и layouting по
полному алгоритму из Unicode бы не помешал.

--
http://fossarchy.blogspot.com/

mikhgd

unread,
Sep 30, 2010, 10:33:17 PM9/30/10
to Erlang в России
Простите, вопрос от новичка: А простые комментарии писать на русском
языке в Эрланге как-то можно?
(Win Vista, Erlang R13B04)

Иван

unread,
Oct 1, 2010, 2:01:53 AM10/1/10
to Erlang в России
Конечно можно. Стандартным способом.

Max Lapshin

unread,
Oct 1, 2010, 2:44:34 AM10/1/10
to erlang-...@googlegroups.com
2010/10/1 Иван <neh...@gmail.com>:
> Конечно можно. Стандартным способом.
>

А вы пробовали потом по ним edoc запустить?

Иван

unread,
Oct 1, 2010, 4:33:12 AM10/1/10
to Erlang в России
Не пробовал. Судя по http://erlang.2086793.n4.nabble.com/UTF8-and-EDoc-td2088002.html
+ http://erlang.2086793.n4.nabble.com/UTF8-meta-and-EDoc-td2231178.html,
edoc патчится очень просто.

On 1 окт, 09:44, Max Lapshin <max.laps...@gmail.com> wrote:
> 2010/10/1 Иван <nehr...@gmail.com>:

Adel Chepkunov

unread,
Oct 1, 2010, 8:35:08 AM10/1/10
to Erlang в России
О, как хорошо, что про edoc вспомнили :)

Я пропатчил примерно так же, генерируется html без ошибок, но
кодировку явно не указывает. Если браузер не догадается, то приходится
вручную указывать в браузере :(

On 1 окт, 12:33, Иван <nehr...@gmail.com> wrote:
> Не пробовал. Судя поhttp://erlang.2086793.n4.nabble.com/UTF8-and-EDoc-td2088002.html
> +http://erlang.2086793.n4.nabble.com/UTF8-meta-and-EDoc-td2231178.html,

Иван

unread,
Oct 1, 2010, 9:21:43 AM10/1/10
to Erlang в России
А вторую ссылку смотрели? Там, вроде, как раз оно :)

Adel Chepkunov

unread,
Oct 1, 2010, 11:26:58 AM10/1/10
to Erlang в России
Ой, и правда :)

mikhgd

unread,
Oct 1, 2010, 9:10:06 PM10/1/10
to Erlang в России
Извините, можно ссылку, где описано как это сделать?
У меня ругается "illegal character".
On 1 окт, 10:01, Иван <nehr...@gmail.com> wrote:
> Конечно можно. Стандартным способом.

Иван

unread,
Oct 2, 2010, 4:01:54 AM10/2/10
to Erlang в России
Следующий файл сохраняю в utf8 без BOM:
-module(test).
-export([test/0]).
% Бесполезный комментарий
test() ->
ok.
Проверяем:
H:\Erl>erl
Eshell V5.7.1 (abort with ^G)
1> c(test).
{ok,test}
2> test:test().
ok

mikhgd

unread,
Oct 2, 2010, 4:29:09 PM10/2/10
to Erlang в России
Большое Спасибо. Сработало.

On 2 окт, 12:01, Иван <nehr...@gmail.com> wrote:
> Следующий файл сохраняю в utf8 без BOM:

....

Reply all
Reply to author
Forward
0 new messages