簡體   English   中英

Ruby to_yaml utf8字符串

[英]Ruby to_yaml utf8 string

如何使用ruby to_yaml方法存儲帶有原始符號的utf8字符串而不是轉義序列?

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字符串。

這可能是一個非常糟糕的主意,因為我確信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?"

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
#=> #<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設置為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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM