解决yaml for Ruby中的意外行为--内部unicode字符串
(1.9在Windows上) 复制:解决yaml for Ruby中的意外行为--内部unicode字符串,ruby,serialization,yaml,symbols,Ruby,Serialization,Yaml,Symbols,(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
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字符的符号似乎不正常。它们被解释为以冒号作为第一个字符的字符串
我很确定这个脚本昨晚起作用了。但我今天早上醒来,一切都出了问题
有人知道我如何解决这个问题吗
我曾尝试使用一些聪明的正则表达式/子黑客来绕过这个问题并“重新转换”,但它们都被证明不雅观或使情况变得更糟。我也是1.9的新手,但有时似乎必须将编码添加到文件顶部。比如:
# encoding: utf-8
再次。。。不知道什么时候或者为什么。仍然需要学习1.9中的工作原理。我在这里找到了更多的背景信息:“。我也是1.9的新手,但有时似乎必须将编码添加到文件的顶部。比如:
# encoding: utf-8
再次。。。不知道什么时候或者为什么。仍然需要学习1.9中的工作原理。我在这里找到了更多的背景信息:“。您的文件编码是什么?默认的外部编码是什么?因为您使用的是Ruby 1.9(假设为1.9.2),所以可以使用.encoding检查编码。@Luis我是1.9的新手,所以编码对我来说是非常陌生的<代码>s为UTF-8
s_yamld
是ASCII-8BITunyamld
是UTF-8。您的文件编码是什么?默认的外部编码是什么?因为您使用的是Ruby 1.9(假设为1.9.2),所以可以使用.encoding检查编码。@Luis我是1.9的新手,所以编码对我来说是非常陌生的<代码>s为UTF-8s_yamld
是ASCII-8BITunyamld
是UTF-8。添加注释行真的有效吗?编译器真的会解析它吗?我在一篇关于这个的博客文章中添加了一个链接。是的,编译器似乎理解这一点。不知道它是否能解决你的问题。添加注释行真的有效吗?编译器真的会解析它吗?我在一篇关于这个的博客文章中添加了一个链接。是的,编译器似乎理解这一点。但我不知道这是否能解决你的问题。