Я пытаюсь читать символы Юникода (за пределами диапазона latin1) с io:fread
.io: fread для символов Unicode не работает с -noshell
Кода ниже штраф в режиме оболочки работы:
Eshell V5.10.4 (abort with ^G)
1> io:fread("Input some Unicode characters: ", "~ts").
Input some Unicode characters: 呵呵
{ok,[[21621,21621]]}
При использовании -noshell
флага, однако, он возвращает другой список:
$ erl -noshell -eval "io:format(\"~p\", [io:fread(\"Input: \", \"~ts\")])."
Input: 呵呵
{ok,[[229,145,181,229,145,181]]}
Кто-нибудь знает, почему он ведет себя так, как это?
Спасибо, это работает. Вход идет прямо сейчас, но после того, как я установил параметр кодирования в unicode (или utf8), выход становится беспорядочным. У вас есть какие-то сведения об этом? –
Я не уверен, есть ли другое решение, но бит-синтаксис, похоже, решает проблему. 'erl -noshell -eval" io: setopts ([{encoding, utf8}]), io: format (\ "~ ts ~ n \", [<< \ "Hello world 呵呵 \" >>]). "' – Alper
Я нашел проблему. Я использую Erlang R16, хотя он может компилировать исходные файлы utf-8, он все еще рассматривает все строковые литералы как кодировку latin1. В исходный файл должны быть добавлены комментарии «%% - * - кодирование: utf-8 - * -», тогда могут использоваться строковые литералы utf-8. В R17 кодировка по умолчанию изменилась на utf-8. –