0

我有一个文本文件,其中包含一些®(注册商标)符号。该文件采用 UTF-8 格式。

我正在尝试导入此文件并使用 Rails 3 填充 MySQL 数据库。数据库似乎设置得很好,可以采用 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 编码,并且使用 mysql2 gem。

如果我删除注册商标字符,错误就会消失。但是,将其从传入的文本中剥离并不是一个真正的选择。

我在这里尝试了解决方案: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-8bit(也就是二进制)。

如果您知道文件的编码,则可以使用force_encoding!更改字符串的编码(无需转码)。如果您并不总是确定文件的编码,charguess可以使用 gem 来猜测它。

于 2013-01-22T22:12:56.393 回答
0

尝试添加一个

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

在每个文件的开头,包含在整个过程中

于 2013-01-22T20:17:55.833 回答