2012-05-15 10 views
5

Potrzebuję być w stanie używać plików binarnych z postaciami cyrylicy w nich. Próbowałem po prostu pisać <<"абвгд">>, ale dostałem błąd badarg.Erlang i binarny z cyrylicą

Jak mogę pracować z ciągami cyrylicowymi (lub unicodowymi) w Erlangu?

+1

Jest to pomocne: http://www.erlang.org/doc/apps/stdlib/unicode_usage.html – NPE

Odpowiedz

12

Jeśli chcesz wprowadzić powyższe wyrażenie w erlang shell, przeczytaj instrukcję użytkownika modułu unicode. Funkcja character_to_binary i character_to_list są funkcją nawrotną. Poniżej przedstawiono przykład:

([email protected])37> io:getopts(). 
[{expand_fun,#Fun<group.0.33302583>}, 
{echo,true}, 
{binary,false}, 
{encoding,unicode}] 

([email protected])40> A = unicode:characters_to_binary("上海"). 
<<228,184,138,230,181,183>> 

([email protected])41> unicode:characters_to_list(A). 
[19978,28023] 

([email protected])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]]) 

([email protected])46> io:format("~ts~n",[ unicode:characters_to_list(A,utf8)]). 
上海 
ok 

Jeśli chcesz użyć unicode:characters_to_binary("上海"). bezpośrednio w kodzie źródłowym, jest to trochę bardziej skomplikowane. Możesz go najpierw wypróbować, aby znaleźć różnicę.

6

Kompilator Erlang interpretuje kod jako zakodowany tekst ISO-8859-1, który ogranicza się do znaków alfabetu łacińskiego. Chociaż możesz być w stanie zagrać w niektóre znaki ISO, które mogą mieć taką samą reprezentację bajtów, jak chcesz w Unicode, nie jest to bardzo dobry pomysł.

Chcesz się upewnić, że twój edytor odczytuje i zapisuje ISO-8859-1 i chcesz uniknąć używania literałów w jak największym stopniu. Źródło tych ciągów z plików.