(Windows上为1.9)
复制:
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
正常的符号表现良好,但带有Unicode字符的符号似乎不太好。它们被解释为以冒号作为第一个字符的字符串。
我很肯定这个剧本昨晚起作用了。但我今天早上醒来,一切都出了问题。
有人知道我怎么解决这个问题吗?
我试过使用一些聪明的正则表达式/子hack来绕过这个问题并“重新转换”,但它们都被证明是不雅的,或者使情况更糟。
最佳答案
我对1.9也不太熟悉,但似乎有时必须将编码添加到文件的顶部。类似于:
# encoding: utf-8
再一次。。。不知道什么时候为什么。仍然需要学习它在1.9中的工作原理我在这里找到了更多的背景信息:“Ruby 1.9 Common Problems Pt. 1: Encoding”。