erlang如何打印unicode字符串?

Chi*_*ang 2 unicode erlang

我使用io:format将消息记录到磁盘.每条消息都类似于[{field1,Content1},{field2,Content2},...].

当我使用io:format("〜p",[Msg])打印它时,文件看起来像[{field1,<< 123,456,789,... >>},...].

但我想以原始形式打印unicode字符串,而不是整数数组.我该怎么办?

noa*_*ald 9

butter71是正确的,您将无法打印出该术语并将二进制文件解释为Unicode.您必须首先隔离二进制文件.打印二进制文件时,您还需要使用't',它允许您打印latin1范围之外的字符.请参阅:http://www.erlang.org/doc/man/io_lib.html#format-2

这是一个打印出你喜欢的东西的例子.我使用unicode:characters_to_binary将我输入的内容转换为UTF8.只做<<"¿,©,ō">>会导致异常.

Msg = [{field1, unicode:characters_to_binary("¿,©,?")}, {field2, ...}, ...]
[{field1, Field1}|_] = Msg.
io:format("~ts~n", [Field1]).
¿,©,?
ok
io:format("~s~n", [Field1]). 
¿,©,Å
ok
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,没有't'的示例会产生乱码文本.

如果您要尝试遍历您的结构以将其转换为字符串并将其打印出来,请查看iolists.