我怎样才能让红宝石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