gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中将文本转换为 unicode?

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:34 24 4
gpt4 key购买 nike

在我的数据库中,我有以下条目

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)

然而,我最终得到的是数据库中类似于 \x{A2AF}\x{A8FA}\x{A1C6}\x{A2A5}\x{A8A2} 的东西,而不是횉철쩔짭쩌.

我对 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...

即使事实证明我有正确的文本。那是为什么呢?进入最后一步。

第 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)

希望这对看到这个的人有帮助(了解我自己,可能是 future 的我)。

关于ruby-on-rails - 如何在 Rails 中将文本转换为 unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com