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

Проблема с UTF-8

(5 posts)

  1. Про?у прощения, если такая тема уже поднималась.

    ?меем модуль:

    -module(test).
    -export([func/0]).

    func() ->
    unicode:characters_to_list("привет", utf8).

    Запускаем консоль:
    1> c(test).
    {ok,test}
    2> test:func().
    [208,191,209,128,208,184,208,178,208,181,209,130]
    3> unicode:characters_to_list("привет", utf8).
    [1087,1088,1080,1074,1077,1090]

    Откуда берется такое несоответствие? ? как представить русские буквы в виде одного целого числа, а не пары?

    Отправлено 2 года(лет) назад #
  2. Никакого несоответствия нет, всё верно так как юникод двухбайтовый
    Перекодировать в cp1251 можно так
    http://stm.rest.ru/blog/?p=75

    Отправлено 2 года(лет) назад #
  3. Странно, у меня unicode:characters_to_list("привет"). отображает на экране "привет".
    Это, вообще-то правильное поведение, т.к. если список содержит коды отображаемых символов, то он выводится в консоли в виде текста.

    ?ли вопрос не про отображение на экране?

    Разные результаты могут быть из за кодировки, установленной в текстовом редакторе, в котором файл test.erl набирался. Возможно, она отличается от кодировки в консоли Эрланга. Поэтому списки и получаются разными.

    Отправлено 2 года(лет) назад #
  4. Вот тут http://erlanger.ru/page/1367/priklyucheniya-unicode-v-erlang все разжевали, только проглотить

    Отправлено 2 года(лет) назад #
  5. Запутано это все с кодировками.

    По первому посту правильный ответ такой:
    Когда "привет" написано в модуле, имеет значение кодировка данного модуля. Если кодировка модуля не совпадает с кодировкой консоли Эрланга, то функция func будет отображать либо список, либо кракозябры. Если кодировка файла и консоли совпадают, то func вернет "привет". Если хотим увидеть в качестве результата функции то же самое, что в ней писали, то для виндов кодировка файла должна быть cp866, для МСВС 3.0 - koi8-r, для других систем - иная :). Кстати, unicode:characters_to_list(X, utf8), которой в качестве X подан список, просто возвращает этот список. Поэтому тот же эффект будет, если переписать функцию так:

    func() ->
    "привет".

    А вот в консоли если набрать

    unicode:characters_to_list("привет", utf8).

    либо просто

    "привет".

    отобразится "привет". ? произойдет это потому, что в консоли сразу используется юникод (Говорю про версию Эрланга 5.7.5).
    Т.е. оказывается, что "привет" в консоли и в скомпилированном модуле - в общем случае совер?енно разные списки. Поэтому и вывод разный.

    Отправлено 2 года(лет) назад #

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

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

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

 
 

так же

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



Currently online

No Members around.

сообщество

http://groups.google.com/group/erlang-russian/feed/rss_v2_0_msgs.xml