(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”。

09-11 03:56
查看更多