2012-04-15 53 views
8

問題出在這裏:我可能有UTF-8字符串,我可能有US-ASCII字符串。無論編碼如何,我都希望YAML.dump(str)實際轉儲String對象,而不是像這些示例所示的那些無用的!binary對象。如何在Ruby 1.9.3中將YAML轉儲爲ASCII-8Bit字符串作爲字符串?

有沒有標誌或我沒有看到的東西強迫YAML.dump()做正確的事情?

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引擎強制舊的行爲。

+1

你爲什麼要強迫編碼'BINARY'擺在首位? – 2012-04-15 21:42:07

+0

因爲有時我正在處理二進制字符串,如「\ xFE \ xFF \ x00 \ x00」,我不想使用UTF-8isms。 – 2012-04-15 21:46:46

+0

此外,這裏只是一個例子。我的真實用例稍微複雜一點:) – 2012-04-16 00:20:39

回答

4

更新:有我自己的答案

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

在全球強制使用一個過時的YAML解析器並不是一個好的方法,想要在這個問題上得到更多答案 – bbozo 2014-03-05 09:59:00