转换MySQL返回的错误编码的字符串

时间:2013-04-19 17:18:45

标签: mysql ruby mysql2

从ruby1.8 / mysql gem迁移到ruby1.9 / mysql2之后,我从遗留数据库中获取了报告为utf8的字符串,但看起来像是用latin1编码的(或者,可能有某种双重编码,如直接force_encoding没有帮助。)

字符串示例:

Ñ„Ñ‹Ð²Ð°Ð¿Ñ€Ð¾Ð»Ð´Ð¶Ñ - just a test string - йцукенгшщзхъ

我希望能够将其转换为

фывапролджэ - just a test string - йцукенгшщзхъ

有人可以帮助转换a)使用ruby代码,和/或b)使用SQL吗?

由于复制粘贴可能会丢失一些信息,返回字符串中的字节:     [195,145,226,128,158,195,145,226,128,185,195,144,194,178,195,144,194,176,195,144,194,191,195,145,226 ,130,172,195,144,194,190,195,144,194,187,195,144,194,180,195,144,194,182,195,145,194,141,32,45,32 ,106,117,115,116,32,97,32,116,101,115,116,32,115,116,114,105,110,103,32,45,32,195,144,194,185 ,195,145,226,128,160,195,145,198,146,195,144,194,186,195,144,194,181,195,144,149,189,195,144,194,179 ,195,145,203,134,195,145,226,128,176,195,144,194,183,195,145,226,128,166,195,145,197,160]

2 个答案:

答案 0 :(得分:1)

好的,我在How to fix double-encoded UTF8 characters (in an utf-8 table)找到了一个SQL解决方案。

CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8)

Ruby的任何接受者?

答案 1 :(得分:0)

您可能希望在config/database.yml中设置数据库连接的编码,尝试不同的设置,直到获得所需的结果。

由于某种原因,您的连接可能是默认为latin1,但在内部被重新解释为UTF8。