Ruby to_yaml utf8字符串
如何使用ruby to_yaml方法存储带有原始符号的utf8字符串而不是转义序列?
这可能是一个非常糟糕的主意,因为我确信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?"
require 'yaml' YAML::ENGINE.yamler='psych' 'Résumé'.to_yaml # => "--- Résumé\n...\n"
Ruby带有两个YAML引擎:syck和psych。 Syck很老而且没有维护,但默认情况下是1.9.2,所以需要切换到psych。 Psych以UTF-8转储UTF-8字符串。
在RubyForge结帐Ya2Yaml。
对于Ruby 1.9.3+,这不是问题:默认的YAML引擎是Psych,它默认支持UTF-8。
对于Ruby 1.9.2-你需要安装psych
gem并在你需要yaml之前需要它:
irb(main):001:0> require 'yaml' #=> true irb(main):002:0> require 'psych' #=> true irb(main):003:0> YAML::ENGINE #=> # 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 #=> # irb(main):004:0> "ça va bien!".to_yaml #=> "--- ça va bien!\n...\n"
或者,将yamler
设置为Evgeny建议(假设您已经安装了psych
gem):
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 regex:匹配并获得位置
- 如何安装旧版Jekyll?
- 运行make install时出现RVM错误。 安装power_assert gem时出错
- 如何使用lib minitest或Test:Unit对unit testing进行着色?
- 在ruby中使用散列排序的正确方法
- 解决Sinatra路线方法缺乏背景的问题
- 在Ruby中动态创建多维哈希
- gem install pg error:无法理解Yosemite w / Ruby 2.1.5上的kern.osversion`14.0.0′
- 在select_tag中,使用options_from_collection_for_select,如何在rails上的ruby中设置所选元素