我使用Mongoid为我的ORM将数据从MySQL表导入MongoDB。尝试将电子邮件地址另存为字符串时出错。错误是:
/Library/Ruby/Gems/1.8/gems/bson-1.2.4/lib/../lib/bson/bson_c.rb:24:in `serialize': String not valid UTF-8 (BSON::InvalidStringEncoding)
from /Library/Ruby/Gems/1.8/gems/bson-1.2.4/lib/../lib/bson/bson_c.rb:24:in `serialize'
从我的GUI - 这是表格信息的屏幕截图。您可以看到它以UTF8编码。
同样来自我的GUI - 这是我导入的MySQL表中字段的屏幕截图
当我从MySQL CLI获取数据时会发生这种情况。
最后,当我检查ruby对象中的数据时,我得到的内容如下所示:
我在这里有点困惑,因为无论我的表是UTF-8还是那个funky显然是有效的UTF-8字符作为双字节。有人知道我为什么会收到这个错误吗?
答案 0 :(得分:6)
尝试使用此助手:
http://snippets.dzone.com/posts/show/4527
它提出了一个方法utf8?在字符串上。所以你可以从mysql中获取String并查看它是否是utf8:
my_string.utf8?
如果不是,那么您可以尝试使用其他方法更改String的编码:
my_string.asciify_utf8
my_string.latin1_to_utf8
my_string.cp1252_to_utf8
my_string.utf16le_to_utf8
也许这个String在其中一个编码中保存在mysql上。