ruby 1.8.7为什么.to_yaml将一些字符串转换为不可读的字节

时间:2011-09-27 22:43:01

标签: ruby yaml

使用nokogiri解析一些网页,我在清理一些字符串并使用YAML保存时遇到了一些问题。要重现此问题,请查看此IRB会话,以重现相同的问题:

irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> "1,000 €".to_yaml
=> "--- !binary |\nMSwwMDAg4oKs\n\n"
irb(main):003:0> "1,0000 €".to_yaml
=> "--- \"1,0000 \\xE2\\x82\\xAC\"\n"
irb(main):004:0> "1,00 €".to_yaml
=> "--- !binary |\nMSwwMCDigqw=\n\n"
irb(main):005:0> "1 €".to_yaml
=> "--- !binary |\nMSDigqw=\n\n"
irb(main):006:0> "23 €".to_yaml
=> "--- !binary |\nMjMg4oKs\n\n"
irb(main):007:0> "12000 €".to_yaml
=> "--- !binary |\nMTIwMDAg4oKs\n\n"
irb(main):008:0> "1200000 €".to_yaml
=> "--- \"1200000 \\xE2\\x82\\xAC\"\n"
irb(main):009:0> "120000 €".to_yaml
=> "--- \"120000 \\xE2\\x82\\xAC\"\n"
irb(main):010:0> "12000 €".to_yaml
=> "--- !binary |\nMTIwMDAg4oKs\n\n"

总而言之,有时.to_yaml输出是可读的,而其他时候输出是不可读的。最有趣的方面是字符串非常相似。

我怎样才能避免这些!二进制......输出?

1 个答案:

答案 0 :(得分:1)

YAML是否倾向于将字符串转储为文本或二进制是ASCII和非ASCII字符之间的比例问题。

如果您想尽可能避免!binary,则应使用ya2yaml gem。它努力将字符串转储为ASCII +转义的UTF-8。