Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
ruby 1.9.3为什么JSON.generate(h)抛出UndefinedConversionError错误,而h.to_JSON没有_Ruby_Json - Fatal编程技术网

ruby 1.9.3为什么JSON.generate(h)抛出UndefinedConversionError错误,而h.to_JSON没有

ruby 1.9.3为什么JSON.generate(h)抛出UndefinedConversionError错误,而h.to_JSON没有,ruby,json,Ruby,Json,对于一组特定的数据,我们将哈希转换为JSON的常用代码会抛出一个错误: the_json = JSON.generate(h) => Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8 在试图找出导致问题的字符时,我们注意到使用to_json不会引发错误 h.to_json => (very long string that looks correct) 有人对这件事有什么想法吗 (a) 如何找到

对于一组特定的数据,我们将哈希转换为JSON的常用代码会抛出一个错误:

the_json = JSON.generate(h)
=> Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8
在试图找出导致问题的字符时,我们注意到使用to_json不会引发错误

h.to_json
=> (very long string that looks correct)
有人对这件事有什么想法吗

(a) 如何找到令人不快的角色,以便我们能够追踪它是如何发生的

(b) 为什么JSON.generate比_JSON更脆弱


(c) 最重要的是:如何调用JSON.generate来强制_编码(就像许多其他ruby方法所允许的那样),以便在哈希包含“Sjöholm”这样的名称时处理时不会引发异常。

看起来
to_json
方法不会执行UTF-8验证,而
json.generate
会:

"\xC3" =~ /./         # => ArgumentError: invalid byte sequence in UTF-8
JSON.generate("\xC3") # => ArgumentError: invalid byte sequence in UTF-8
"\xC3".to_json        # => "\"\xC3\"" XXX: not valid UTF-8

根据我的经验,尝试正则表达式匹配字符串是确保正确UTF-8编码的一种简单可靠的方法(因此是上面示例的第一行)。

Hmm,看起来像
JSON。generate
使用的UTF验证形式与
to_JSON
不同。。。