1

我正在存储大型对象,它是一个巨大的散列,带有嵌套的散列、数组、字符串等。这里有一个非常相似的问题。这给出了以下猴子补丁:

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 级深度,我不知道如何将它重构为蜘蛛通过。

4

1 回答 1

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 编码问题

于 2013-04-15T17:40:03.130 回答