(1,9 в Windows)
воспроизводящий:
require 'yaml'
s = YAML::load("\xEC\x86\x8C\xEB\x85\x80\xEC\x8B\x9C\xEB\x8C\x80")
# => "∞åîδàÇ∞ï£δîÇ" or "소녀시대", depending on your terminal's unicode support
s_interned = s.intern
s_interned.class # => Symbol
s_yamld = s_interned.to_yaml
# => "--- \":\\xEC\\x86\\x8C\\xEB\\x85\\x80\\xEC\\x8B\\x9C\\xEB\\x8C\\x80\"\n"
unyamld = YAML::load(s_yamld)
# => ":∞åîδàÇ∞ï£δîÇ" or ":소녀시대"
unyamld.class # => String
# => expected: Symbol
И еще раз:
YAML::load(s_interned.to_yaml).class # => String
Вот как ведет себя «нормальный» символ:
YAML::load(:foo.to_yaml).class # => Symbol
Нормальные символы ведут себя нормально, но символы с символами Юникода, похоже, не работают. Они интерпретируются как строки с двоеточием в качестве первого символа.
Я почти уверен, что этот скрипт работал прошлой ночью. Но я проснулся этим утром, и все пошло не так.
Кто-нибудь знает, как я могу решить эту проблему или обойти это?
Я пытался использовать некоторые умные хаки с регулярными выражениями, чтобы обойти это и «переконвертировать», но все они оказались не элегантными или усугубили ситуацию.