Рубиновая строка to_yaml utf8

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

Ответы на вопрос(4)

require 'yaml'
YAML::ENGINE.yamler='psych'
'Résumé'.to_yaml # => "--- Résumé\n...\n"

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

 18 мар. 2012 г., 14:50
Обратите внимание, что этот ответ работает только для Ruby 1.9.3 (где Psych уже используется по умолчанию). Приведенный выше код не работает для Ruby 1.9.2 (no such file to load -- psych).
 18 мар. 2012 г., 17:00
& # x2026; если вы сначала не установитеpsych драгоценный камень.
Решение Вопроса

вероятно, очень плохая идея, так как я уверен, что 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?"
 11 мар. 2011 г., 14:31
В прошлом было разумно использовать кодировку ASCII по умолчанию, но сейчас это не так. И в руководстве говорится: «Потоки YAML кодируются с использованием набора печатаемых символов Unicode, либо в UTF-8, либо в UTF-16». Так что я думаю, что это просто ограничение в библиотеке Ruby, to_yaml должен возвращать UTF-8 по умолчанию. В противном случае действительно обременительно модифицировать эти YAML с помощью редактора.
 16 мар. 2011 г., 12:01
Дамп иногда возвращает двоичный тип: YAML.unescape (YAML.dump (& quot; s & # xFA; & quot;)) - & gt; ---! двоичный | c8O6

механизм YAML по умолчанию - Psych, который по умолчанию поддерживает UTF-8.

Для Ruby 1.9.2 - вам необходимо установитьpsych драгоценный камень и требует егоbefore you require 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"
 06 янв. 2011 г., 05:36
Вы можете найти обновленную версию с gemspec здесь:github.com/afunai/ya2yaml

Ваш ответ на вопрос