我怎樣才能讓紅寶石to_yaml方法來存儲與原來的跡象UTF8字符串而不是轉義序列?紅寶石to_yaml UTF8字符串
3
A
回答
3
這可能是一個非常糟糕的主意,因爲我相信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?"
3
7
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字符串。
2
對於紅寶石1.9.3+,這不是一個問題:默認YAML發動機是精極度緊張,默認支持UTF-8。
爲Ruby 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"
相關問題
- 1. 紅寶石to_yaml字符串我的json
- 2. 紅寶石陣#to_yaml不叫to_yaml遞歸
- 3. 紅寶石GSUB字符串
- 4. 紅寶石ZEROFILL字符串
- 5. 奇怪的紅寶石to_yaml行爲
- 6. 拆分UTF8字符串無論紅寶石版本
- 7. 紅寶石:字符從字符串
- 8. 字符串文字的紅寶石'OR'
- 9. 紅寶石拆分字符串
- 10. 紅寶石字符串連接
- 11. 紅寶石推字符串數組
- 12. 字符串類在紅寶石
- 13. 轉換紅寶石字符串BIGNUM
- 14. 紅寶石 - 字符串內的評估
- 15. 紅寶石:字符串比較問題
- 16. 紅寶石比較字符串
- 17. 紅寶石字符串散列值
- 18. 紅寶石散列字符串插值
- 19. 字符串操作紅寶石圖案
- 20. 紅寶石:字符串替換零件
- 21. 紅寶石:UNESCAPE unicode字符串
- 22. 紅寶石相當打印字符串
- 23. 紅寶石字符串散列轉換
- 24. 紅寶石字符串連接(我想?)
- 25. 對齊字符串紅寶石
- 26. 紅寶石包含字符串$ {...}
- 27. 字符串修剪紅寶石
- 28. 紅寶石 - 用另一個字符串
- 29. 紅寶石字符串分割問題
- 30. 紅寶石陣成字符串括號
以前在默認情況下使用ASCII編碼是合理的,但事實並非如此現在。手冊說:「YAML流使用一組可打印的Unicode字符進行編碼,無論是UTF-8還是UTF-16。」。所以我認爲這只是Ruby庫中的一個限制,to_yaml默認應該返回UTF-8。否則,用編輯器修改這些YAML確實很麻煩。轉儲有時會返回一個二進制類型:YAML.unescape(YAML.dump(「sú」)) - > ---!binary | – tokland 2011-03-11 13:31:17
c8O6 – tokland 2011-03-16 11:01:39