5

我需要能够使用带有西里尔字符的二进制文件。我试着写<<"абвгд">>,但我得到了一个 badarg 错误。

如何在 Erlang 中使用西里尔文(或 unicode)字符串?

4

2 回答 2

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("上海").直接在源码中使用,会稍微复杂一些。你可以先试试看有什么不同。

于 2012-05-15T08:31:26.643 回答
6

Erlang 编译器会将代码解释为 ISO-8859-1 编码文本,这会将您限制为拉丁字符。尽管您可能能够在 Unicode 中添加一些可能具有相同字节表示的 ISO 字符,但这不是一个好主意。

您希望确保您的编辑器能够读取和写入 ISO-8859-1,并且您希望尽可能避免使用文字。从文件中获取这些字符串。

于 2012-05-15T16:50:54.727 回答