Unicode 带有UTF8二进制文件的erlang os:cmd()命令

Unicode 带有UTF8二进制文件的erlang os:cmd()命令,unicode,encoding,erlang,utf,Unicode,Encoding,Erlang,Utf,我试图获取一个Erlang函数来执行包含unicode字符的bash命令。例如,我希望执行以下等效项: touch /home/jani/ჟანიweł 我将该命令放在变量D中,例如: io:fwrite("~ts", [list_to_binary(D)]). touch /home/jani/ჟანიwełok 但在我执行之后: os:cmd(D)

我试图获取一个Erlang函数来执行包含unicode字符的bash命令。例如,我希望执行以下等效项:

touch /home/jani/ჟანიweł
我将该命令放在变量
D
中,例如:

io:fwrite("~ts", [list_to_binary(D)]).                                                                       
touch /home/jani/ჟანიwełok
但在我执行之后:

os:cmd(D)
我得到一个名为
ááááéweÅ?
的文件。我怎样才能修好它

os:cmd(binary_to_list(unicode:characters_to_binary("touch /home/jani/编程"))).

执行此命令将创建一个名为
的文件,而直接在终端中执行等效的
touch
命令将创建具有正确名称的文件。

这是因为Erlang默认读取源文件的方式与latin1相同,但在较新版本的Erlang上,您可以将文件设置为使用unicode

%% coding: utf-8

-module(test).
-compile(export_all).

test() ->
    COMMAND = "touch ჟანიweł",
    os:cmd(COMMAND).
然后编译和执行模块就可以了

rorra-air:~ > erl
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V6.4  (abort with ^G)
1> c(test).
{ok,test}
2> test:test().
[]
它在我的文件系统上创建了这个文件

rorra-air:~ > ls -lta
total 144
-rw-r--r--   1 rorra  staff      0 Jun  9 15:18 ჟანიweł

尝试使用os:cmd(unicode:characters\u to_list(D,latin1))os:cmd(unicode:characters\u to_list(D,unicode))他们没有帮助,为什么不使用Erlang
文件
模块创建或更新相关文件?例如,您可以使用
文件:write_file_info/2,3
功能之一更新文件访问和修改时间,就像
touch
一样。有关详细信息,请参阅。我想将unicode字符串作为参数传递给其他一些bash脚本。实际上,我编写了关于touch命令的内容,只是为了简化这个问题