You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby脚本输出YAML中ANSI转义字符未生效,如何解决?

解决YAML中ANSI转义字符与换行符在Ruby输出不生效的问题

问题根源

YAML默认不对无引号包裹的字符串解析转义序列(如\e、\n),这些字符会被当作普通字面量存储,导致Ruby直接输出时终端原样打印。

解决办法

方法1:修改YAML文件,用双引号包裹字符串

YAML中双引号包裹的字符串会自动解析转义序列,修改data.yml如下:

game:
  welcome: "Welcome to \e[34myour\e[0m new chess game players.\n\n"

之后用原Ruby代码读取输出,ANSI颜色格式和换行符即可正常生效。

方法2:在Ruby代码中手动解析转义序列

若无法修改YAML文件,可在读取后对字符串做转义处理,将字面量转义字符替换为实际控制字符:

welcome_text = data['game']['welcome']
# 替换\e为ESC控制符,\n为换行符
parsed_text = welcome_text.gsub(/\\e/, "\e").gsub(/\\n/, "\n")
puts parsed_text

如果需要支持更多转义序列(如\t),可以用更通用的解析方式(注意:仅当YAML字符串不含双引号或语法冲突字符时使用):

welcome_text = data['game']['welcome']
parsed_text = eval(%Q{"#{welcome_text}"})
puts parsed_text

内容的提问来源于stack exchange,提问作者jbk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:33:12