3

好的。所以我有一个大型的遗留数据库,它支持一个高流量的网站。这些表是 latin1 编码的,我正在转换为 UTF-8。我们已经将该站点转换为 Rails,并且我们开始直接访问数据库。然而,似乎在将 utf8 字符插入数据库时​​发生了一些非常奇怪的事情。我们正在使用 Tolk (https://github.com/dhh/tolk) 将站点转换为中文,不幸的是,该站点是在将翻译表转换为 UTF-8 之前设置的。问题是我们将一个奇怪的字符格式插入到 latin1 表中用于 unicode 字符。

这是一个例子:

--- "xfire\xE7\x94\xA8\xE6\x88\xB7\xEF\xBC\x9F\xE8\xAF\xB7\xE7\x82\xB9\xE5\x87\xBB<a dialog-name='account_actions' href='#login' class='dialog_link login add_overlay'>Sign in</a>\xE7\xBC\x96\xE8\xBE\x91\xE4\xBD\xA0\xE7\x9A\x84\xE8\xB4\xA6\xE6\x88\xB7\xE4\xBF\xA1\xE6\x81\xAF"

数据被序列化为 YAML,Rails 或数据库似乎正在做一些事情来将 unicode 中文字符转换为这种反斜杠分隔的十六进制格式。

任何想法可能会发生什么?有没有办法将这些十六进制字符串翻译成相应的 utf-8 字符?

4

1 回答 1

1

事实证明,问题出在 YAML 上(请参阅Rails: encoding woes with serialized hashes 尽管 UTF8)。

将此添加到 environment.rb 完全解决了问题:

YAML::ENGINE.yamler= 'syck' if defined?(YAML::ENGINE)
于 2012-06-14T22:46:19.877 回答