новости сообщество форум вики
Erlang по-русски. Форум » Erlang »

Кодировка в werl

(5 posts)

  1. dlebedev
    Участник

    Не могу разобраться с кодировками в werl.

    Предистория проблемы:
    Была (и есть) программа, написанная на erlang, вместе с которой в пачке лежала и сама ма?ина erlang версии R12B (erts-5.6.5) и все работало отлично, но руки у меня зачесались обновить erlang и была установлена версия R14B04 (erts-5.8.5) в другое место (старая версия все еще жива) и тут начались странности.

    Для примера вот часть сообщений, которые выводила старая версия erlang:
    'code'

    Erlang (BEAM) emulator version 5.6.5 [smp:4] [async-threads:0]

    =PROGRESS REPORT==== 17-Nov-2011::09:22:26 ===
    supervisor: {local,sasl_safe_sup}
    started: [{pid,<0.39.0>},
    {name,alarm_handler},
    {mfa,{alarm_handler,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]

    =PROGRESS REPORT==== 17-Nov-2011::09:22:26 ===
    supervisor: {local,sasl_safe_sup}
    started: [{pid,<0.40.0>},
    {name,overload},
    {mfa,{overload,start_link,[]}},
    {restart_type,permanent},
    {shutdown,2000},
    {child_type,worker}]
    ...
    '/code'

    и далее
    'code'
    ...
    id='_' x="Россия"
    ...
    '/code'

    А вот, что выводит версия R14B04:
    'code'
    Erlang R14B04 (erts-5.8.5) [smp:4:4] [rq:4] [async-threads:0]

    Eshell V5.8.5 (abort with ^G)
    (ps@kontur)1>
    ...
    id='_' x="Ðîññèÿ"
    ...
    '/code'

    Собственно, меня бы это не обеспокоило, если бы мне не надо было вводить русские символы в параметры вызова функций (я ищу о?ибку в чужой программе и активно пользуюсь консолью для этого). Всякие перекодировщики в сети говорят, что "Ðîññèÿ" это тот же "Россия", только в кодировке CP1252.

    Теперь сам вопрос: Можно ли как-то сделать так, чтоб в R14B04 русские символы вводились и выводились в правильной кодировке (как в R12B) и что за отладочная инфа была в начале в версии R12B?

    Отправлено 6 мес. назад #
  2. Посмотрите здесь на форуме в старых сообщениях мои изыскания по поводу кодировок.

    Насколько я вспоминаю, дело здесь в кодировке файлов исходников и кодировке консоли, в которой идет запуск. Сам эрланг на кодировку не влияет.

    Отправлено 6 мес. назад #
  3. dlebedev
    Участник

    Спасибо, что откликнулись :)

    Давненько я к эрлангу не возвращался, да вот опять нужда на работе приперла.
    К сожалению, виновата именно эрланговская машина, потому что это единственное, что меняется.

    Есть каталог C:\ps\server (ну да, дело под Windows происходит). Есть две версии erlang. Одна лежит в каталоге C:\ps\erl и имеет номер R12B. Вторая установлена через инсталлятор в каталог C:\Erlang и имеет версию R14B04. Запуск происходит в обоих случаях через bat-файл, где просто прописывается путь к werl и параметры запуска.

    Как видите, влияние других факторов исключено. Проблема до сих пор не решена. Я знаю, что erlang работает с кодировкой CP1252, но как это сиправить не знаю.

    Кстати, если запустить tv:start() и посмотреть на базы даных программы, то можно увидеть, что все строковые данные тоже отображаются в кодировке CP1252 (в любой из имеющихся версий erlnag). Что бы это могло значить?

    Требуемая мне кодировка - CP1251. Пробовал в реесттре подменять кодовые таблицы, но результат нулевой.

    Отправлено 3 нед. назад #
  4. Попробуйте сделать файл с исходниками в той же кодировке, что и кодировка консоли.

    Отправлено 2 нед. назад #
  5. telnov1971
    Участник

    На сколько я понимаю, Эрланг, согласно документации, вообще не может работать со строками кроме кодировок Latin-1 и Unicode. Я в своем коде в исходниках пишу в кодировке Unicode, а в функциях типа io:format/2 использую формат строки типа "~ts", что заставляет Эрланг вывести строку в Unicode, а не Latin-1.

    Отправлено 1 нед. назад #

RSS экспорт этой темы

Отправить сообщение

Вы должны войти в систему, чтобы оставлять сообщения.

 
 

так же

Популярные тэги



Currently online

No Members around.

twitter