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会做你想要的。