gpt4 book ai didi

ruby - YAML:解析带有转义双引号的字符串时出错

转载 作者:数据小太阳 更新时间:2023-10-29 07:14:22 25 4
gpt4 key购买 nike

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(the-desired-string) 发现了这一点

最佳答案

你的问题是,就转义而言,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!\""
}

关于ruby - YAML:解析带有转义双引号的字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19310181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com