rails模型中的UTF-8编码

the*_*ott 2 ruby ruby-on-rails utf-8

我有一个MySQL数据库,设置为使用UTF-8.

在我的database.yml中,数据库设置为utf8.

我正在做一些HTML抓取并插入MySQL数据库.

如果我在PHP中从数据库中检索HTML,它会正确编码所有字符并产生精细输入:

// code
$result = mysql_query("SELECT raw_html FROM pages WHERE id = 1");
echo mysql_result($result,0);

// output
Hawai?i.
Run Code Online (Sandbox Code Playgroud)

输出看起来很棒.但是,在rails中,我得到了奇怪的字符:

// code in the controller
@page = Page.find(params[:id])

// code in the view
<%= @page.raw_html %>

// output
Hawaiʻi
Run Code Online (Sandbox Code Playgroud)

还有其他地方我需要强制使用UTF-8吗?我尝试使用iconv库无济于事(除非我使用它错了).

更新:我在使用控制台时再现了同样的问题.所以:

Page.find(2).raw_html[91..94]

"Ê»"
Run Code Online (Sandbox Code Playgroud)

在控制台(脚本/控制台)下也会出现问题,如果这样可以解决问题.

更新2:好的,经过进一步调查,我意识到我做的事情是愚蠢的.但它没有解决它.

当表格设置为UTF8时,列不是.我已将列更改为'utf8_general_ci'.然而(这让我觉得我搞砸了一些基本的东西),这实际上产生了正确的结果:

@raw_html = Iconv.conv('LATIN1','UTF-8',@page.raw_html[0..10000])
Run Code Online (Sandbox Code Playgroud)

那很可爱.不幸的是,如果我浏览整个页面,我会得到:

Iconv::IllegalSequence in PagesController#show 
"€²18″N<"...
Run Code Online (Sandbox Code Playgroud)

所以那里还有一些其他时髦的东西.可能是我仍然对它进行'拉丁'编码,即使我已经明确地将表和列都设置为UTF-8(并重新填充HTML)?根据Jeffrey的建议,我目前正在使用mysql2 gem.

更新3:澄清一下,我也遇到了控制台错误.这是命令:

Page.find(2).raw_html[91..94]
Run Code Online (Sandbox Code Playgroud)

这是回应:

"Ê»"
Run Code Online (Sandbox Code Playgroud)

Ric*_*ard 5

在您的database.yml中添加encoding: utf8到每个环境设置中.