2

這可能是我不得不要求在Stackoverflow中最奇怪的問題之一:)如何在Mysql中故意插入錯誤編碼的字符串?

我有一個遺留的,未經測試的PHP應用程序,我根本無法觸及。此應用程序使用Mysql和每個帳戶一個數據庫。所以我們有成千上萬的數據庫。

由於在開始工作之前出現錯誤,所以此應用程序連接到Mysql中的錯誤編碼。所以在數據庫中,我們應該有「é」的地方,我們實際上會得到「Ã」。雖然在應用程序中(由於錯誤的連接編碼),我們得到了é。

我有一個Rails應用程序管理帳戶/數據庫的創建。問題在於Rails應用程序正在使用正確的編碼,並且當它創建數據庫時,它將插入一些PHP應用程序無法正確讀取的數據。

我的問題:考慮到我在Ruby中有一個字符串「é」,我如何故意將其更改爲「Ã」?任何string.encode,我可以使用?

注1:我不能轉儲所有數據庫和解決這個(這將是理想的解決方案)

注2:我不能切換的Rails連接編碼,因爲它使用具有正確的編碼另一個數據庫

回答

1

你可以嘗試有默認字符集爲

config.action_controller.default_charset = 'ISO-8859-1' 
在配置

/application.rb中

原來的PHP編碼看起來是ISO 8859-1或Windows 1252

我想這對IRB後發現,這是工作

1.9.3p194 :002 > puts "é".force_encoding("ISO-8859-1").encode("UTF-8") 
é 
=> nil 
+0

謝謝! force_encoding正是我需要的。 – Fernando

+0

Windows-1252是一個更安全的選擇,因爲MySQL「Latin-1/ISO-8859-1」被錯誤標記爲Windows-1252,而Windows-1252實際上是ISO-8859-1的超集,取代了ISO中未使用的控制字符-8859-1具有可顯示和使用的字符,如'€'或'-' – Esailija

相關問題