Erlang - error_logger打印中文

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 ============!

你可能感兴趣的:(Erlang - error_logger打印中文)