Рубиновая строка to_yaml utf8 - PullRequest
3 голосов
/ 21 июля 2009

Как сделать метод ruby ​​to_yaml для хранения строк utf8 с оригинальными знаками, но без escape-последовательности?

Ответы [ 4 ]

7 голосов
/ 27 января 2012
require 'yaml'
YAML::ENGINE.yamler='psych'
'Résumé'.to_yaml # => "--- Résumé\n...\n"

Рубиновые корабли с двумя двигателями YAML: syck и psych. Syck устарел и не поддерживается, но по умолчанию в 1.9.2, поэтому нужно переключиться на psych Psych сбрасывает строки UTF-8 в UTF-8.

3 голосов
/ 22 июля 2009

Оформить заказ Ya2Yaml на RubyForge .

3 голосов
/ 21 июля 2009

Это, вероятно, очень плохая идея, так как я уверен, что у 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?"
2 голосов
/ 18 марта 2012

Для Ruby 1.9.3+ это не проблема: механизм YAML по умолчанию - Psych, который по умолчанию поддерживает 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...