erlang如何打印unicode字符串?

问题描述:

我使用io:格式将消息记录到磁盘。每条消息看起来像[{field1,Content1},{field2,Content2},...]。erlang如何打印unicode字符串?

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

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

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。

只需使用“〜s”而不是“〜p”即可成功。

还检查了Unicode的模块做转换 - http://erldocs.com/R14B/stdlib/unicode.html

编辑:我看了一遍你的问题,并意识到你要打印的整个结构。你可能不得不首先把它分开,我不认为〜p会做你想要的。