如何在Rails中将文本转换为unicode?
在我的数据库中,我有以下条目
id | name | info 1 John Smith Çö ¿¬¼
正如您所知,信息列显示错误 – 但它实际上是韩语。 在Chrome中,当我将浏览器编码从UTF-8切换到韩文(我认为是’euc-kr’)时,我实际上设法查看文本:
id | name | info 1 John Smith 횉철 쩔짭쩌
然后我手动将文本复制到数据库中的信息并保存,现在我可以用UTF-8查看它,而无需切换浏览器的编码。
真棒。 现在我想在Rails中完成同样的事情,而不是手动完成。 所以再次从原始条目开始,我转到控制台并输入:
require 'iconv' u = User.find(1) info = u.info new_info = Iconv.iconv('euc-kr','UTF-8', info) u.update_attribute('info', new_info)
但是,我最终得到的是数据库中횉철 쩔짭쩌
,而不是“ 횉철 쩔짭쩌
。
我对unicode和编码有一个非常基本的了解。
有人可以解释一下这里发生了什么,以及如何解决这个问题? 我想要的结果是我手动实现的。
谢谢!
哇。 我现在正在打自己的头脑。 经过几个小时的尝试解决这个问题,我在这里发布一个问题几分钟后终于弄明白了。
该解决方案包括三个简单的步骤:
步骤1:
我几乎把它弄好了。 我不应该从euc-kr转换为utf-8,反之亦然,如此:
Iconv.iconv('UTF-8', 'euc-kr', info)
第2步:
我可能仍会在文本中遇到一些错误,所以为了安全起见我告诉Iconv忽略任何错误:
Iconv.iconv('UTF-8//IGNORE', 'euc-kr', info)
最后,我实际上得到了真正的韩国文本,耶! 问题是,当我尝试将其插入数据库时,它仍然插入以下内容:
UPDATE `users` SET `info` = '--- \n- \"\\xEC\\xB2\\xA0\\xEC\\xB1\\x8C...' etc...
即使事实certificate我有正确的文字。 那为什么呢? 到最后一步。
第3步:
原来Iconv的输出是一个数组。 所以,我们将它与join
合并:
Iconv.iconv('UTF-8//IGNORE', 'euc-kr', info).join
这实际上有效!
最终代码:
require 'iconv' u = User.find(1) info = u.info new_info = Iconv.iconv('UTF-8//IGNORE','euc-kr', info).join u.update_attribute('info', new_info)
希望这有助于任何人看到这一点(并了解自己,可能是未来的我)。
为什么你用Iconv转换它? 首先,如果你在数据库上看到正确的样式,你应该确保数据库的charset在脚本端是utf8,你只需保存韩文值,而不是使用Iconv