在YAML周圍的意外行爲的工作對Ruby - 實習Unicode字符串(在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字符的符號似乎不是。他們被解釋爲帶冒號作爲第一個字符的字符串。
我很確定這個腳本昨晚工作。但今天早上我醒了,一切都出了問題。
有誰知道我該如何解決這個問題或解決這個問題?
我試過使用一些聰明的正則表達式/子黑客來解決這個問題,並「重新」,但他們都證明不雅或使情況變得更糟。
什麼是您的文件enconding?什麼是您的默認外部編碼?由於您使用的是Ruby 1.9(假設1.9.2),您可以使用.encoding檢查編碼。 – 2010-09-12 03:45:57
@Luis我是全新的1.9,所以編碼的東西對我來說很陌生。 's'是UTF-8; 's_yamld'是ASCII-8BIT。 'unyamld'是UTF-8。 – 2010-09-12 06:15:07