如何在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