我有一个由某些函数生成的元组列表,如下所示:
[{"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字符串的适当表示?
答案 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