2

这可能是我在 Stackoverflow 中不得不问的最奇怪的问题之一 :)

我有一个旧的、未经测试的 PHP 应用程序,我根本无法触摸。此应用程序使用 Mysql 和每个帐户一个数据库。所以我们有成千上万的数据库。

由于在我开始使用它之前就出现了一个错误,这个应用程序连接到 Mysql 中的错误编码。所以在数据库中,我们应该有“é”的地方我们实际上得到了“é”。虽然在应用程序中(由于错误的连接编码),我们得到了é。

我有一个管理帐户/数据库创建的 Rails 应用程序。问题是 Rails 应用程序使用了正确的编码,当它创建数据库时,它会插入一些 PHP 应用程序无法正确读取的数据。

我的问题:考虑到我在 Ruby 中有一个字符串“é”,我如何故意将其更改为“é”?我可以使用任何 string.encode 吗?

注 1:我无法转储所有数据库并修复此问题(这将是理想的解决方案)

注意 2:我无法切换 Rails 连接编码,因为它使用另一个具有正确编码的数据库

4

1 回答 1

1

您可以尝试将默认字符集设置为

config.action_controller.default_charset = 'ISO-8859-1'

在 config/application.rb

原始 PHP 编码看起来像是 ISO 8859-1 或 Windows-1252

我在 irb 上试过这个,发现这是有效的

1.9.3p194 :002 > puts "é".force_encoding("ISO-8859-1").encode("UTF-8")
é
 => nil 
于 2013-01-07T13:04:25.123 回答