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?
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?
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ę.
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.
Jest to pomocne: http://www.erlang.org/doc/apps/stdlib/unicode_usage.html – NPE