Ruby / Mongo - 字符串无效UTF-8(BSON :: InvalidStringEncoding)

时间:2013-04-15 16:22:45

标签: ruby mongodb hash utf-8

我正在存储大型对象,这是一个巨型哈希,具有嵌套的哈希,数组,字符串等。 这个here有一个非常简单的问题。这给出了以下猴子补丁:

class Hash
  def to_utf8
    Hash[
        self.collect do |k, v|
          if (v.respond_to?(:to_utf8))
            [ k, v.to_utf8 ]
          elsif (v.respond_to?(:encoding))
            [ k, v.dup.encode('UTF-8') ]
          else
            [ k, v ]
          end
        end
    ]
  end
end

这个答案很棒,但似乎没有超过1级,我不知道如何将它重构为蜘蛛。

1 个答案:

答案 0 :(得分:0)

如果无论如何可能,而不是修复症状,尝试在源头修复问题。应用程序堆栈中的某个位置编码是偏斜的。如果你能解决这个问题,它可能是最稳定,最有效的方法。

否则你将不得不遍历整个MongoDB文档并按下这些值(不要忘记密钥,它们也作为字符串存储在MongoDB中),并按照以下步骤进行操作:

if text.respond_to?(:to_utf8)
  text.to_utf8
elsif text.respond_to?(:encoding)
  text.encode('utf-8')
else
  text
end

我无法帮助您浏览文档,因为我需要有关模型结构及其持久性的更多信息。

修改

我喜欢这个解决方案,而不是遍历模型树:https://stackoverflow.com/a/15789340/436112。将其视为JSON并对整个文档进行编码/解码,修复过程中的UTF-8编码问题