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
相关产品推荐
相关产品推荐

