Erlang18,在使用error_logger打印中文的时候碰到个问题,在这里分享下,希望对大家有用。代码如下:
-module( glogger ).
-export([p/0] ).
p() ->
error_logger:error_msg( "1 English~n" ),
error_logger:error_msg( "2 ~p~n", ["中文"] ),
error_logger:error_msg( "3 中文~n" ),
error_logger:error_msg( "4 End ============!~n" ),
ok.
运行之后的输出是:
=ERROR REPORT==== 6-Aug-2019::21:06:01 ===
1 English
=ERROR REPORT==== 6-Aug-2019::21:06:01 ===
2 [20013,25991]
可见,在第3行error_logger的Format中包含中文的时候,报错了。
但是,在tty上却可以正常输出:
C:\Users\GODWiT>erl
Eshell V7.3 (abort with ^G)
1> error_logger:error_msg( "你好,中国!~n" ).
ok
=ERROR REPORT==== 6-Aug-2019::21:09:14 ===
你好,中国!
2>
解决方案如下(将字符串转换为binary):
-module( glogger ).
-export([p/0] ).
p() ->
error_logger:error_msg( "1 English~n" ),
error_logger:error_msg( "2 ~p~n", ["中文"] ),
error_logger:error_msg( unicode:characters_to_binary("3 中文~n") ),
error_logger:error_msg( "4 End ============!~n" ),
ok.
输出如下:
=ERROR REPORT==== 6-Aug-2019::21:34:00 ===
1 English
=ERROR REPORT==== 6-Aug-2019::21:34:00 ===
2 [20013,25991]
=ERROR REPORT==== 6-Aug-2019::21:34:00 ===
3 中文
=ERROR REPORT==== 6-Aug-2019::21:34:00 ===
4 End ============!