【发布时间】: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