2

これはおそらくStackoverflowで私が尋ねなければならなかった最も奇妙な質問の1つです:)

私は、まったく触れられない、テストされていないレガシーのPHPアプリケーションを持っています。このアプリケーションは、Mysqlとアカウントごとに1つのデータベースを使用します。つまり、何千ものデータベースがあります。

作業を開始する前にエラーが発生したため、このアプリは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エンコーディングはISO8859-1またはWindows-1252のように見えます

私はこれをirbで試しましたが、これが機能していることがわかりました

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