2011-04-29 136 views
2

我使用io:格式將消息記錄到磁盤。每條消息看起來像[{field1,Content1},{field2,Content2},...]。erlang如何打印unicode字符串?

當我使用io:format(「〜p」,[Msg])來打印它時,該文件看起來像[{field1,< < 123456789,... >>},...]。

但我想打印unicode字符串的原始形式,不像整數數組。我該怎麼辦?

回答

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 

正如你可以看到沒有't'的例子會產生亂碼文本。

如果您要嘗試穿過結構將其轉換爲字符串並打印出來,請查看iolists。

0

只需使用「〜s」而不是「〜p」即可成功。

還檢查了Unicode的模塊做轉換 - http://erldocs.com/R14B/stdlib/unicode.html

編輯:我看了一遍你的問題,並意識到你要打印的整個結構。你可能不得不首先把它分開,我不認爲〜p會做你想要的。