erlang如何打印unicode字符串?

时间:2011-04-29 01:30:07

标签: unicode erlang

我使用io:format将消息记录到磁盘。每封邮件都显示为[{field1,Content1},{field2,Content2},...]。

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

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

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:0)

您可能只使用“〜s”代替“~p”就可以获得成功。

同时查看unicode模块进行转换 - http://erldocs.com/R14B/stdlib/unicode.html

编辑:我再次阅读你的问题并意识到你想打印整个结构。你可能不得不首先将它拆开,我不认为~p会做你想做的事。

相关问题