Ruby on Rails - 在rake任务中剥离身体中的奇怪角色

时间:2011-08-02 21:01:36

标签: ruby-on-rails ruby encoding utf-8 latin1

在我公司的Rails网站上,我们有一个Twitter区域,我们的社交媒体团队的推文通过rake任务显示。基本上rake任务使用Twitter gem定期将任何新推文导入数据库,并从那里显示它们。使用auto_link助手将推文中的URL链接转换为HTML链接。

一直工作正常,直到现在。突然间,链接被破坏,甚至错误地突出显示URL链接之前的单词。所以在一个示例推文中应该是这样的:“请保持安全。圣路易斯。加热警告延长到8月http://bit.ly/ ...”,八月字被链接,后面的URL本身被打破,好像在最后一个单词和链接之间有一些东西打破它...

调查帮助者,在数据库中查找推文的文本字段以查看是否有任何异常,甚至使用rails控制台手动拉出推文,但一切看起来还不错。直到我一路走进我看到的推文正文的十六进制代码......

Please be safe S
t. Louis. Heat w
arning extended 
through August.
 http://bit.ly/
r5fXlz #heatpoca
lypse

因此,罪魁祸首是被扔进空间,当我删除罪魁祸首空间并在数据库中手动读取时,问题就解决了。

唯一的问题是,我不明白为什么推文正文被这样导入,特别是当它通过Rails控制台看起来很好的时候。由于这是一个较旧的数据库,我注意到它仍在某些区域使用latin1编码,其他区域使用utf8,我确信将所有这些转换为UTF-8会修复它,但事实并非如此。

在进口之前,我试图在身体上使用卫生助手,但这也不起作用。

还尝试使用ruby gsub来剥离¬†,但它没有用。

有没有人对如何解决这个奇怪的问题有任何见解?

1 个答案:

答案 0 :(得分:0)

终于能够通过在rake任务中的body字符串上运行以下内容来解决这个问题...

Iconv.conv('ASCII//TRANSLIT', 'UTF8', tweet.body)

奇怪,但它确实有效。有关使用上述内容的更多信息,请访问:ruby (1.8.7): How to get rid of non-printable chars while scraping?