Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解决yaml for Ruby中的意外行为--内部unicode字符串_Ruby_Serialization_Yaml_Symbols - Fatal编程技术网

解决yaml for Ruby中的意外行为--内部unicode字符串

解决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

(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
普通符号的行为良好,但带有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-8BIT
unyamld
是UTF-8。您的文件编码是什么?默认的外部编码是什么?因为您使用的是Ruby 1.9(假设为1.9.2),所以可以使用.encoding检查编码。@Luis我是1.9的新手,所以编码对我来说是非常陌生的<代码>s为UTF-8
s_yamld
是ASCII-8BIT
unyamld
是UTF-8。添加注释行真的有效吗?编译器真的会解析它吗?我在一篇关于这个的博客文章中添加了一个链接。是的,编译器似乎理解这一点。不知道它是否能解决你的问题。添加注释行真的有效吗?编译器真的会解析它吗?我在一篇关于这个的博客文章中添加了一个链接。是的,编译器似乎理解这一点。但我不知道这是否能解决你的问题。