Неверная строка UTF-8 (BSON :: InvalidStringEncoding) при сохранении строки, совместимой с UTF8, в MongoDB через Mongoid ORM - PullRequest
4 голосов
/ 23 марта 2011

Я импортирую данные из таблицы MySQL в MongoDB, используя Mongoid для моего ORM. Я получаю сообщение об ошибке при попытке сохранить адрес электронной почты в виде строки. Ошибка:

/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'

Из моего графического интерфейса - это скриншот информации о таблице. Вы можете видеть, что это закодировано в UTF8.

table info

Также из моего графического интерфейса - это снимок экрана поля в моей таблице MySQL, который я импортирую

what the data looks like in mysql GUI

Вот что происходит, когда я получаю данные из MySQL CLI.

what the data looks like in mysql CLI

И, наконец, когда я проверяю данные в моем объекте ruby, я получаю что-то похожее на это: inspected ruby object

Я немного запутался здесь, потому что независимо от того, какая таблица у меня в UTF-8, и этот фанк, по-видимому, является действительным символом UTF-8 в виде двойного байта. Кто-нибудь знает, почему я получаю эту ошибку?

1 Ответ

6 голосов
/ 24 марта 2011

Попробуйте использовать этот помощник:

http://snippets.dzone.com/posts/show/4527

Это ставит метод utf8? на струне. Таким образом, вы можете взять строку из mysql и посмотреть, является ли она utf8:

my_string.utf8?

Если нет, то вы можете попробовать изменить кодировку вашей строки, используя другие методы, такие как:

my_string.asciify_utf8
my_string.latin1_to_utf8
my_string.cp1252_to_utf8
my_string.utf16le_to_utf8

Может быть, эта строка сохранена в MySQL в одной из этих кодировок.

...