Erlang对Unicode字符串的术语

时间:2018-05-07 06:47:07

标签: string unicode printing erlang

我有一个由某些函数生成的元组列表,如下所示:

[{"a","ą"}, {"ą","a"}, {"a","o"}, {"o","e"}]

但是当我打印它时,我会在终端中看到:

[{"a",[261]}, {[261],"a"}, {"a","o"}, {"o","e"}]

我通常用这个命令打印它:

io:format("~p~n", [functionThatGeneratesListOfTuples()]),

到目前为止,我发现在打印Unicode字符串时需要使用~ts,所以我尝试了这个:

Pairs = functionThatGeneratesListOfTuples(), PairsStr = io_lib:format("~p", [Pairs]), io:format("~ts~n", [PairsStr]),

是否有可能实现Unicode字符串的适当表示?

1 个答案:

答案 0 :(得分:4)

检测整数列表作为字符串的启发式方法默认只识别Latin-1字符,因此[65,66,67]打印为"ABC",但[665,666,667]打印为"[665,666,667]"即使你使用~tp。您必须以erl +pc unicode启动Erlang才能使其接受高于255的可打印unicode代码点。在该模式下,[665,666,667]打印为"ʙʚʛ" ~tp(但不是{ {1}})。

有关详细信息,请参阅http://erlang.org/doc/man/io.html#printable_range-0,以及最近对文档的改进,这些改进将包含在OTP 21中:https://github.com/erlang/otp/pull/1737/files