我怎样才能让存储与原来的迹象UTF8字符串但不转义序列红宝石to_yaml方法?
Answer 1:
这可能是一个非常糟糕的主意,因为我相信YAML有它的,因为它确实编码字符的原因,但它似乎并不太难撤消:
require 'yaml'
require 'yaml/encoding'
text = "Ça va bien?"
puts text.to_yaml(:Encoding => :Utf8) # => --- "\xC3\x87a va bien?"
puts YAML.unescape(YAML.dump(text)) # => --- "Ça va bien?"
Answer 2:
require 'yaml'
YAML::ENGINE.yamler='psych'
'Résumé'.to_yaml # => "--- Résumé\n...\n"
红宝石船有两个YAML引擎:SYCK和斗志。 SYCK是旧的,而不是维持,但它是默认1.9.2,这样一个需要切换到斗志。 迷幻转储UTF-8 UTF-8字符串。
Answer 3:
结帐Ya2Yaml在RubyForge上 。
Answer 4:
为Ruby 1.9.3+,这不是一个问题:默认的YAML引擎是精极度紧张,它默认支持UTF-8。
对于红宝石1.9.2-您需要安装psych
宝石和需要它,你需要YAML之前 :
irb(main):001:0> require 'yaml'
#=> true
irb(main):002:0> require 'psych'
#=> true
irb(main):003:0> YAML::ENGINE
#=> #<YAML::EngineManager:0x00000001a1f642 @yamler="syck">
irb(main):004:0> "ça va?".to_yaml
#=> "--- \"\\xC3\\xA7a va?\"\n"
irb(main):001:0> require 'psych' # gem install psych
#=> true
irb(main):002:0> require 'yaml'
#=> true
irb(main):003:0> YAML::ENGINE
#=> #<YAML::EngineManager:0x00000001a1f828 @yamler="psych">
irb(main):004:0> "ça va bien!".to_yaml
#=> "--- ça va bien!\n...\n"
另外,设置yamler
为叶夫根建议(假设你已经安装了psych
宝石):
irb(main):001:0> require 'yaml'
#=> true
irb(main):002:0> YAML::ENGINE.yamler
#=> "syck"
irb(main):003:0> "ça va?".to_yaml
#=> "--- \"\\xC3\\xA7a va?\"\n"
irb(main):004:0> YAML::ENGINE.yamler = 'psych'
#=> "psych"
irb(main):005:0> "ça va".to_yaml
#=> "--- ça va\n...\n"
文章来源: Ruby to_yaml utf8 string