私はEugeneがこれらの問題の理由について正しいと思っています。パーサーは、有効な8進数を含む文字列を別々に扱うようです。
好きではない場合は、別のYAMLパーサーに切り替えることができます。 docsによれば、利用可能なパーサーは、Syck
とPsych
です。前者は古いものであり、後者はその代用品である。
Psych
は、Railsの最新バージョンで使用され、1.9.3のデフォルトのYAMLエンジンです。あなたがいる限りあなたが同じエンジンを使用しているようSyck
内の文字列の異なる表現を心配する必要はありません見ることができるように
require 'yaml'
p YAML::ENGINE.yamler # => "syck"
# or explicitly set YAML::ENGINE.yamler = "syck" in 1.9.3
p '01'.to_yaml # => "--- \"01\"\n"
p '08'.to_yaml # => "--- 08\n"
p YAML.load('01'.to_yaml) # => "01"
p YAML.load('08'.to_yaml) # => "08"
p YAML::ENGINE.yamler = "psych"
p '01'.to_yaml # => "--- '01'\n"
p '08'.to_yaml # => "--- '08'\n"
p YAML.load('01'.to_yaml) # => "01"
p YAML.load('08'.to_yaml) # => "08"
:しかし、あなたは簡単に1.9.2でそれを使用して違いを見ることができますデータをデコードします(どちらの場合も元の文字列を返します)。
は、何らかの理由であなたは(それが、少なくともこの場合に、より一貫性のある)Psych
に切り替えていますが、以前だっPsych
データをロードしようとしてトラブルになるかもしれないよう注意することができYAML内の文字列のための統一された表現が必要な場合Syck
で投棄された。
これは私が必要なものです!ありがとう! – agate
YAMLパーサーが1.9.3で変更されたことを知りませんでした。ヒントをありがとう! – Eugene
OS X(RVMを介してインストールされている)で 'ruby 1.9.3p194'を実行しています.YAML :: ENGINE.yamlerが' 'psych" '' 08 ''と ' '09 ''。 –