ruby 1.9.3为什么JSON.generate(h)抛出UndefinedConversionError错误,而h.to_JSON没有
对于一组特定的数据,我们将哈希转换为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) 如何找到
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
不同。。。