0

いくつかの®(登録商標)記号が含まれているテキストファイルがあります。ファイルはUTF-8です。

このファイルをインポートし、Rails 3を使用してMySQLデータベースにデータを入力しようとしています。DBは、UTF-8を使用するように正常にセットアップされているようです。

+-------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| Field       | Type         | Collation       | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| id          | int(11)      | NULL            | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| user_id     | int(11)      | NULL            | YES  | MUL | NULL    |                | select,insert,update,references |         |
| title       | varchar(255) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| translation | text         | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| created_at  | datetime     | NULL            | NO   |     | NULL    |                | select,insert,update,references |         |
| updated_at  | datetime     | NULL            | NO   |     | NULL    |                | select,insert,update,references |         |
+-------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+

しかし、私がこれを行おうとすると、次のようになります。

trans_file = params[:descriptions] #coming from file_field_tag
trans = trans_file.read.split("\r\n")
trans.each do |tran|
  ttl = ''
  desc = ''
  tran.split(']=').each do |title|
    if title =~ /\[/ #it's the title
      ttl = title.sub('[','')
    else
      desc = title.gsub('FFF', "\r\n")
    end
  end
  @current_user.cd_translations.build(title: ttl, translation: desc).save

「アクションコントローラー:互換性のない文字エンコード:ASCII-8BITおよびUTF-8」というエラーが発生します。

application.rbファイルでutf-8エンコーディングを使用しており、mysql2gemを使用しています。

登録商標文字を削除すると、エラーはなくなります。しかし、それは実際には着信テキストからそれを取り除くオプションではありません。

私はここで解決策を試しました:https ://stackoverflow.com/a/5215676/102372 、しかしそれは何の違いもありませんでした。

スタックトレース:

app/controllers/users_controller.rb:28:in `block in update_cd_translations'
app/controllers/users_controller.rb:15:in `each'
app/controllers/users_controller.rb:15:in `update_cd_translations'
config/initializers/quiet_assets.rb:7:in `call_with_quiet_assets'

どうすればこれを解決できますか?

4

2 に答える 2

1

rubyは、アップロードされたファイルのエンコーディングがASCII-8ビット(つまり、バイナリ)であると考えているようです。

ファイルのエンコーディングがわかっている場合は、を使用force_encoding!して文字列のエンコーディングを変更できます(トランスコーディングなし)。ファイルのエンコーディングを常に確認できるとは限らない場合は、charguessgemを使用してファイルを推測できます。

于 2013-01-22T22:12:56.393 に答える
0

追加してみてください

# -*- encoding : utf-8 -*-

プロセス全体に含まれる各ファイルの先頭

于 2013-01-22T20:17:55.833 に答える