不兼容的字符编码:Ruby 1.9中的ASCII-8BIT和UTF-8

Tam*_*Tam 7 ruby-on-rails ruby-1.9

我的Ruby 1.9和Rails 2.3.4出现以下错误.当用户提交非ASCII标准字符时会发生这种情况.

我阅读了很多在线资源,但似乎没有一个解决方案有效.

我尝试过使用(作为一些资源建议)

string.force_encoding('utf-8') 
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.

任何想法如何解决这个问题?有没有办法在保存到数据库之前消除这些字符?或者,有没有办法让它们显示?

Jho*_*ung 11

对于ruby 1.9和Rails 3.0.x,请使用mysql2适配器.

在你的gemfile中:

gem 'mysql2', '~> 0.2.7'
Run Code Online (Sandbox Code Playgroud)

并将您的database.yml更新为:

adapter: mysql2
Run Code Online (Sandbox Code Playgroud)

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


Epc*_*lon 1

我对 Ruby(或 Rails)了解不多,但我想问题是由于缺乏对字符编码的控制而引起的。

首先,您应该决定在数据库中存储哪种编码。然后,您需要确保在存储到数据库之前将所有文本转换为该编码。为此,您首先需要知道它是以哪种编码开始的。

一个经常被重复的建议是,在您控制所有输入后,尽快将所有输入从它使用的任何编码解码为 un​​icode(如果您的语言支持它)。然后您就知道您在程序中处理的所有文本都是 unicode。另一方面,将文本编码为您想要的任何输出编码,作为输出之前的最后一步。

关键是始终知道代码中任何给定位置的文本使用哪种编码。