Erlang os:cmd/1 如何运行带有 Unicode 字符的命令



>5> os:cmd("touch programming").

异常错误:没有与 os:validate1([32534,31243]) 匹配的函数子句(os.erl,第 330 行)
在函数 os:cmd/1 (os.erl, 第 165 行)

Erlang 使用拉丁语 1 作为其源文件,这意味着您不能直接在代码中使用中文或任何其他不在拉丁语 1 编码中的符号。

实现你所抱怨的最简单方法是:

Name = [231,188,150,231,168,139,10].
os:cmd("touch " ++ Name).
好吧

,如果你的shell的语言环境是UTF-8,就这样做:

os:cmd(binary_to_list(unicode:characters_to_binary("touch 编程")))

但是在源文件中,您可以简单地编写

os:cmd("touch 编程").

并将文件保存在 UTF-8 中,然后一切都会正常工作。

似乎 Erlang 解析器对文字字符串做了一些特别的事情。

最新更新