Erlang and binary with Cyrillic

binary, erlang, unicode

Solution

If you want to input the above expression in `erlang shell`, please read `unicode` module user manual. Function `character_to_binary`, and `character_to_list` are both reversable function. The following are an example:

(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

If you want to use `unicode:characters_to_binary("上海").` directly in the source code, it is a little more complex. You can try it firstly to find difference.

Problem

I need to be able to use binaries with Cyrillic characters in them. I tried just writing `<<"абвгд">>` but I got a badarg error. How can I work with Cyrillic (or unicode) strings in Erlang?

Original source