【问题标题】:Ruby / Mongo - String not valid UTF-8 (BSON::InvalidStringEncoding)Ruby / Mongo - 字符串无效 UTF-8 (BSON::InvalidStringEncoding)
【发布时间】:2013-04-07 20:36:19
【问题描述】:

我正在存储大型对象,它是一个巨大的散列,带有嵌套的散列、数组、字符串等。 这个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 级深度,我不知道如何将它重构为蜘蛛通过。

【问题讨论】:

    标签: ruby mongodb hash utf-8


    【解决方案1】:

    如果可能的话,与其解决症状,不如尝试从源头上解决问题。在您的应用程序堆栈中的某个地方,编码是倾斜的。如果你能解决这个问题,这可能是最稳定、最有效的解决方法。

    否则,您将不得不遍历整个 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 编码问题

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2023-03-23
      • 1970-01-01
      • 2011-07-25
      • 2016-11-08
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多