YAML转储不一致的字符串编码

时间:2019-04-08 01:27:07

标签: ruby-on-rails ruby yaml

Ruby版本:2.2.5 Rails版本:“〜> 4.0.13”

为什么我和我的朋友在尝试使用YAML.dump方法将字符串转换为YAML时收到不同的结果?

[1] pry(main)> YAML.dump("foo")
=> "--- foo\n"
[2] pry(main)> "foo".to_yaml
=> "--- foo\n"

他有:

[1] pry(main)> YAML.dump("foo")
=> "--- foo\n...\n"
[2] pry(main)> "foo".to_yaml
=> "--- foo\n...\n"

换行符(...)后有三点

已更新

我已确认我的Rails在Rails控制台中使用Psych作为YAML解析器引擎:

2.2.5 :002 > YAML
 => Psych
2.2.5 :004 > Psych.dump("foo")
 => "--- foo\n"
2.2.5 :005 > YAML.dump("foo")
 => "--- foo\n"
2.2.5 :006 >

但是结果仍然有所不同。有关其他信息,我没有安装任何syck gem,并且在rails项目的任何文件中都不需要它。

1 个答案:

答案 0 :(得分:1)

似乎“您”可能正在使用syck作为YAML处理器,而“他”正在使用psych。例如。

 require 'syck' 
 require 'psych'
 Syck.dump("foo")
 #=> "--- foo\n"
 Psych.dump("foo")
 #=> "--- foo\n...\n"

这两者都是有效的YAML解析器/发射器,尽管Psych从1.9开始就被首选,而Syck实际上仅是作为向后兼容的宝石存在,并且从2.0开始从ruby标准库中完全删除。 0

至于为什么“ You”以某种方式使用Syck而不是我不能说的信息比这篇文章提供的要多。