【发布时间】:2011-04-07 12:56:28
【问题描述】:
我在使用 Rails 2.3.8 和 Ruby 1.9.1 时遇到了问题 活动记录中的序列化属性不保留字符串编码。 潜在的问题可能是yaml,但我想知道是否有人有 关于如何处理这个问题的任何好主意。我正在开发的应用程序有 许多序列化字段,其中一些包含深层结构 数组和哈希。取回一个 ASCII-8Bit 字符串(实际上是 UTF-8) 在这些结构的深处,后来破坏了……
也许最好用例子来说明,如果我将 l 保存到一个序列化的 attr 中 一个活动记录模型,我会在从数据库中读取时返回 l2。
>> l => [“英语”,“土耳其语”,“Русский”] >> l.map(&:编码) => [#,#,#] >> l.map(&:valid_encoding?) => [真实,真实,真实] >> l.to_yaml => "--- \n- 英文\n- !binary |\n VMO8cmvDp2U=\n\n- \"\\xD0\\xA0\\xD1\\x83\\xD1\\x81\\xD1\\x81\\xD0\\xBA\\xD0\\xB8\\xD0\\xB9\"\n" >> l2 = YAML.load(l.to_yaml) => ["英文", "T\xC3\xBCrk\xC3\xA7e", "Русский"] >> l2.map(&:编码) => [#,#,#]有谁知道 yaml 如何决定是否将字符串存储为 二进制与作为转义字符串?上面的最后两个字符串都是 非 ascii-7 但只有第一个存储为二进制...
我目前的想法是挂钩活动记录反序列化例程,遍历哈希和数组并强制对所有字符串元素进行编码。不是非常安全或一般,但可能适用于我的用例,但我也想知道是否有人修补了 YAML 以便在这里更聪明......
【问题讨论】:
标签: ruby-on-rails ruby activerecord yaml