我需要能够使用带有西里尔字符的二进制文件。我试着写<<"абвгд">>
但我得到了一个badarg错误。
如何在Erlang中使用Cyrillic(或unicode)字符串?
答案 0 :(得分:12)
如果您想在erlang shell
中输入上述表达式,请阅读unicode
模块用户手册。
函数character_to_binary
和character_to_list
都是可逆函数。以下是一个例子:
(emacs@yus-iMac.local)37> io:getopts().
[{expand_fun,#Fun<group.0.33302583>},
{echo,true},
{binary,false},
{encoding,unicode}]
(emacs@yus-iMac.local)40> A = unicode:characters_to_binary("上海").
<<228,184,138,230,181,183>>
(emacs@yus-iMac.local)41> unicode:characters_to_list(A).
[19978,28023]
(emacs@yus-iMac.local)45> io:format("~s~n",[ unicode:characters_to_list(A,utf8)]).
** exception error: bad argument
in function io:format/3
called as io:format(<0.30.0>,"~s~n",[[19978,28023]])
(emacs@yus-iMac.local)46> io:format("~ts~n",[ unicode:characters_to_list(A,utf8)]).
上海
ok
如果要在源代码中直接使用unicode:characters_to_binary("上海").
,则会更复杂一些。你可以先试试,找出差异。
答案 1 :(得分:6)
Erlang编译器会将代码解释为ISO-8859-1编码文本,这会将您限制为拉丁字符。虽然您可能会碰到一些可能在Unicode中具有相同字节表示的ISO字符,但这不是一个好主意。
您希望确保您的编辑器读取和写入ISO-8859-1,并且您希望尽可能避免使用文字。从文件中获取这些字符串。