2012-05-15 16 views
5

Necesito ser capaz de utilizar binarios con caracteres cirílicos en ellos. Intenté simplemente escribir <<"абвгд">> pero recibí un error de badarg.Erlang y binario con cirílico

¿Cómo puedo trabajar con cadenas cirílicas (o unicode) en Erlang?

+1

Esto es de alguna ayuda: http://www.erlang.org/doc/apps/stdlib/unicode_usage.html – NPE

Respuesta

12

Si desea ingresar la expresión anterior en erlang shell, lea el manual del usuario del módulo unicode. La función character_to_binary y character_to_list son funciones reversibles. Los siguientes son un ejemplo:

([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 

Si desea utilizar unicode:characters_to_binary("上海"). directamente en el código fuente, que es un poco más compleja. Puedes probarlo primero para encontrar la diferencia.

6

El compilador de Erlang interpretará el código como texto con codificación ISO-8859-1, lo que le limita a caracteres latinos. Aunque es posible que pueda utilizar algunos caracteres ISO que pueden tener la misma representación de bytes que desea en Unicode, esta no es una buena idea.

Quiere asegurarse de que su editor lea y escriba ISO-8859-1, y desea evitar el uso de literales tanto como sea posible. Fuente estas cadenas de archivos.