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)