【问题标题】:How do I get YAML in Ruby as of 1.9.3 to dump ASCII-8Bit strings as strings?从 1.9.3 开始,如何在 Ruby 中获取 YAML 以将 ASCII-8Bit 字符串转储为字符串?
【发布时间】:2012-04-27 07:45:42
【问题描述】:

问题是:我可能有 UTF-8 的字符串,也可能有 US-ASCII 的字符串。无论编码如何,我都希望 YAML.dump(str) 实际转储 String 对象,而不是示例所示的这些无用的 !binary 对象。

是否有一个标志或我没有看到的东西来强制 YAML.dump() 做正确的事情?

Ruby 1.9.1 示例

YAML::VERSION              # "0.60"
a = "foo"                  # => "foo"
a.force_encoding("BINARY") # => "foo"
YAML.dump(a)               # => "--- foo\n" 

Ruby 1.9.3 示例

YAML::VERSION              # "1.2.2"
a = "foo"                  #  => "foo" 
a.force_encoding("BINARY") #  => "foo" 
YAML.dump(a)               # => "--- !binary |-\n  Zm9v\n"

更新:得到我自己的答案

YAML::ENGINE.yamler='syck'
YAML.dump(a)               # => "--- foo\n" 

所以,看起来像使用旧的 yamler 引擎强制旧的行为。

【问题讨论】:

  • 你为什么要强制编码为BINARY?
  • 因为有时我正在处理二进制字符串,例如 "\xFE\xFF\x00\x00",而我不想要 UTF-8isms。
  • 另外,这里只是一个例子。我的真实用例稍微复杂一些:)
  • 我的意思是,我对 YAML 了解不多,但我会说这不是明智的选择。后者绝对是正确的,因为二进制是二进制,而不是 ASCII。将二进制存储为字符串会产生误导,尤其是考虑到所有字符编码的怪异。还有,为什么二进制格式没用?
  • 老实说,我对 YAML 对我的字符串数据的判断调用不感兴趣。我用任何编码输入了一个字符串,我应该得到一个字符串。这是一个剧烈的变化(在仔细阅读其他 StackOverflow 问题之后)至少可以说是令人惊讶的。

标签: ruby string utf-8 binary yaml


【解决方案1】:

更新:得到我自己的答案

YAML::ENGINE.yamler='syck'
YAML.dump(a)               # => "--- foo\n" 

【讨论】:

  • 在全球范围内强制使用过时的 YAML 解析器并不是一个好方法,希望得到更多关于这个问题的答案
猜你喜欢
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2011-01-21
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多