我有一个文本文件,里面有一些®(注册商标)符号。该文件是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'
我该如何解决这个问题?
答案 0 :(得分:1)
看来ruby认为上传文件的编码是ascii-8bit(也就是二进制)。
如果您知道文件的编码,则可以使用force_encoding!
更改字符串的编码(不进行转码)。如果您不总是确定文件的编码,可以使用charguess
gem来猜测它。
答案 1 :(得分:0)
尝试添加
# -*- encoding : utf-8 -*-
在每个文件的开头,包含在整个过程中