【问题标题】:Control characters escaping in Erlang在 Erlang 中转义的控制字符
【发布时间】:2018-04-05 08:54:10
【问题描述】:

在 Erlang 中转义控制字符的正确方法是什么?

我愿意:

[EscapedString] = io_lib:format("~p", [Str]).

对于\t\n 字符,它可以正常工作:

io_lib:format("~p", ["str\ning"]).

["\"str\\ning\""]

但是对于\a

io_lib:format("~p", ["str\aing"]).

["\"straing\""]

io_lib:format("~p", ["a\x07"]).

[[91,["97",44,"7"],93]]

我需要得到"\"str\\aing\"" 字符串,在文件中它应该看起来像"str\aing"

感谢您的帮助:)

【问题讨论】:

  • 对应于documentation,这个序列不会转义,所以如果您需要其他行为,只需编写自己的转换函数。
  • 您可能希望使用~n 而不是\n——因为erlang 会将~n 转换为程序运行所在操作系统的正确换行符序列。与其他语言不同,erlang 不对\n 进行任何换行符转换。

标签: erlang control-characters


【解决方案1】:

'a' 不是控制字符,因此 "\a" 产生与 "a" 相同的字符串。如果你真的想要结果中的反斜杠,你需要转义反斜杠本身:"str\\aing"

如果您希望结果始终是扁平字符串而不是嵌套 io-list,请使用 lists:flatten(io_lib:format(...)),如上一个示例所示。

【讨论】:

  • 我认为您帖子中的输出不是您想要的转义反斜杠。只需在其周围放置代码标签即可。
猜你喜欢
  • 2014-05-31
  • 2011-11-08
  • 2020-06-24
  • 2012-06-26
  • 2019-12-06
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
相关资源
最近更新 更多