Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Функциональные языки: общие вопросы > Кодовые страницы в erlang


Автор: dlebedev 24.4.2012, 22:07
Здравствуйте.

Помогите решить проблему с отображением кириллицы в консоли эрланга под виндой.
Задавал вопрос на erlanger.ru, но там уровень активности местной фауны чуть выше нуля и реальной помощи я так и не получил.

Ситуация такая: есть программа, написанная на erlang (серверная часть программы) и крутится она под версией erlang R12B (erts-5.6.5). Если запустить сервер через bat-файл, а не как сервис, то можно заниматься отладкой и наблюдать за отладочными сообщениями... Русские слова из базы данных отображаются корректно (и ввод русских слов с клавиатуры обрабатывается корректно).

Однако если взять версию erlang поновее (R14B04 (erts-5.8.5)), то начинаются проблемы на ровном месте. Все русские словечки отображаются в некорректной кодировке (CP1252 вместо CP1251), причем это относится как в выводу на экран, так и вводу с клавиатуры. То есть, чтобы передать в функцию параметр "Россия", например, приходится перекодировать его в "Ðîññèÿ". Я даже не знаю, куда копать. Жутко неудобно и вообще, так быть не должно!

Пробовал сравнивать файлы от обеих версий erlang - безнадежно. Yичего подозрительного не нашел).
Пробовал в реестре подменять кодовые страницы для CP1250 и CP1252 на CP1251. Эффект нулевой. Похоже erlang клал на настройки винды с высокой колокольни.

Грешу именно на версию erlang, потому что это единственное, что меняется. Erlang старой верси мне достался по наследству и вообще шел вместе с дистрибутивом программы. Новую версию качал с офф.сайта.

Может кто встречал такой глюк и знает, как его победить?

Автор: k0rvin 26.4.2012, 09:29
попробуй в bat-файле сменить кодировку с помощью chcp

Автор: dlebedev 12.5.2012, 06:41
Цитата(k0rvin @  26.4.2012,  09:29 Найти цитируемый пост)
попробуй в bat-файле сменить кодировку с помощью chcp 

Не помогло. Пробовал запускать erl и werl (как я понял из исходников эрланга, есть небольшая разница между ними), но результат один и тот же. Пробовал собрать erlang из исходников, но тоже потерпел неудачу. Может потому что не сильно старался... Не знаю. Меня напрягло, что нужно ставить MS SDK 7.1, wxWidgets, MSYS и perl и компилить все это черт знает чем. Не осилил в общем. Правда в исходниках покопался и знаете что? Не нашел я там каких-то хитрых ключей для указания кодировок для erlang-машины. Был один ключ у wxWidgets (о поддержке Unicode) и все. Может плохо смотрел?

Автор: dlebedev 12.3.2013, 11:17
В общем, проблема решилась написанием обертки вокруг библиотечной функции io:fwrite, которая при необходимости перекодирует кириллицу из cp1251 в utf8. Можно аналогичные обертки и вокруг других функций сделать, но мне без надобности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)