Ruby 2.0,使用Psych的Yaml似乎无法逃避双引号。任何人都有解决这个问题的想法吗?
data_ =<<END_
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
END_
ap YAML.load(data_)
产生
/Users/x/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/psych.rb:205:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 1 column 1 (Psych::SyntaxError)
使用单引号转义条目有效,但如果它包含单引号,则转义它们也会导致错误。
description: 'Acme acquires ILM: Lucas says "It\'s Inevitable!"'
在理想的世界中,条目将包含正确的unicode印刷引号,但我无法控制这些(虽然我可以在使用YAML处理之前替换它们)...
有任何关于让YAML正确解析这个问题的想法吗?
更新:回答我的问题。发现可以通过复制来逃避单引号,所以这有效:
description: 'Acme acquires ILM: Lucas says "It''s Inevitable!"'
我通过使用YAML.dump(--desired-string)
发现了这一点答案 0 :(得分:7)
你的问题是,就逃逸而言,heredocs就像双引号字符串一样。这意味着你的heredoc中的\"
最终只会在你的字符串中"
。观察:
>> data_ =<<END_
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
END_
>> puts data_
description: "Acme acquires ILM: Lucas says "Inevitable!""
您希望在YAML字符串中获得\
,这样您就必须逃避它:
data_ =<<END_
description: "Acme acquires ILM: Lucas says \\"Inevitable!\\""
END_
或者,使用%q{...}
引用您的字符串,使其行为更像单引号字符串:
data_ = %q{
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
}