ASCII码不可显示

时间:2011-01-12 18:23:11

标签: erlang

我想编写一个函数来转换可见字符串中的“无可见ASCII代码”

示例:

abc \ r \ n将变为abc< 0d>< 0a>

最好的方法是什么?这项功能是否已经存在?

3 个答案:

答案 0 :(得分:1)

pp(C) when C <32 ; C>126 ->
 io_lib:format("<~2.16.0B>",[C]);
pp(C) ->
 C.

1>lists:flatten(lists:map(fun pp/1,"abc\r\n")).
"abc<0D><0A>"

答案 1 :(得分:0)

我猜你可以使用io:format

1>io:format("~w~n",["abc\r\n"]).
[97,98,99,13,10]
ok
2>

答案 2 :(得分:0)

只需重写@Nibon给出的解决方案

pp(Str) -> pp(Str, []).

pp([],Acc) -> lists:flatten(lists:reverse(Acc));
pp([C|S], Acc) when C < 32; C>126 -> pp(S,[io_lib:format("<~2.16.0B>",[C]) | Acc]);
pp([C|S], Acc) -> pp(S,[C | Acc]).

1> pp:pp("abc\r\n").
"abc<0D><0A>"