2009-11-22 10 views
7

Ruby 1.9 & Rails 2.3.4で次のエラーが発生します。これは、ユーザーがASCII以外の標準文字を送信したときに発生します。互換性のない文字エンコーディング:Ruby 1.9のASCII-8BITおよびUTF-8

私は多くのオンラインリソースを読んでいますが、どれも解決策がないようです。

は、私は(いくつかのリソースが示唆したように)

string.force_encoding('utf-8') 

を使用してみましたが、それは助けにはなりませんでした。

これを解決する方法はありますか? DBに保存する前にそのような文字を削除する方法はありますか?または、それらを表示させる方法はありますか?

+4

ます。http://あなたのgemfileで

yehudakatz.com/2010/05/17/encodings-unabridged/ – makevoid

+0

私はこれとしばらく戦ってきました。 Mysql2のgemは動作しませんでした。このような状況に遭遇する可能性のある他の検索者にとっては、blobや他のデータ型をmysqlで使用している場合は、文字列またはテキストに変更してください。それはエンコーディングを維持し、それ以上の頭痛はない。 –

答えて

1

Ruby(またはRails)についてよく分かりませんが、文字エンコーディングの制御が不十分なために問題が発生していると思います。

まず、データベースに保存するエンコードを決定する必要があります。次に、データベースに格納する前に、すべてのテキストをそのエンコードに変換する必要があります。これを行うには、最初にどのエンコードを開始するのかを知る必要があります。

頻繁に繰り返されるアドバイスの1つは、使用しているエンコーディングからすべての入力をデコードし、制御できるようにできるだけ早くUnicode(言語がサポートしている場合)にすることです。次に、プログラムで扱うテキストはすべてUnicodeであることがわかります。もう一方の端で、出力する前に最後のステップとして必要な出力エンコーディングにテキストをエンコードします。

キーは、コード内の任意の場所でテキストが使用しているエンコードを常に知ることです。

10

ruby​​ 1.9とRails 3.0.xについては、mysql2アダプタを使用してください。

gem 'mysql2', '~> 0.2.7' 

とにあなたのdatabase.ymlのを更新:

adapter: mysql2 
イェフダカッツのブログでそれについての良い記事があり

http://www.rorra.com.ar/2010/07/30/rails-3-mysql-and-utf-8/

+1

ありがとう、これは私にとって素晴らしい仕事でした。しかし、mysql2 v0.3。*はRails 3.0.7でエラーをスローすることに注意してください。 http://stackoverflow.com/questions/3467054/problem-with-mysql2-and-rails3-bundler – aNoble

+1

私は「互換性のない文字エンコーディング:ASCII-8BITとUTF-8」を使用している間に 'rack-webconsole'私はこの記事を見つけました。ありがとう、@ジョニーファン! –

関連する問題