3

ruby の to_yaml メソッドを作成して、utf8 文字列を元の記号で格納し、エスケープ シーケンスを格納しないようにするにはどうすればよいですか?

4

4 に答える 4

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?"
于 2009-07-21T19:15:05.257 に答える
2

Ruby 1.9.3+ の場合、これは問題ではありません。デフォルトの YAML エンジンは Psych で、デフォルトで UTF-8 をサポートします。

Ruby 1.9.2 の場合、 yaml を必要とする前にpsych、 gemをインストールしてそれを必要とする必要があります。

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 が提案するように設定します ( psychgem がインストールされていると仮定します):

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"
于 2012-03-18T15:05:48.047 に答える