Странный шестнадцатеричный код с разделителями в MySQL - необходимо преобразовать в UTF8

В ПОРЯДКЕ. Итак, у меня есть большая устаревшая база данных, которая поддерживает веб-сайт с высоким трафиком. Таблицы имеют кодировку latin1, и я нахожусь в процессе преобразования в UTF-8. Мы перевели сайт на Rails и начинаем напрямую обращаться к БД. Однако кажется, что что-то очень странное происходит с символами utf8, вставленными в базу данных. Мы используем Tolk (https://github.com/dhh/tolk) для преобразования сайта на китайский язык, и, к сожалению, сайт был настроен до преобразования таблицы переводов в UTF-8. Проблема в том, что мы получаем странный формат символов, вставляемый в таблицу latin1 для символов Unicode.

Вот пример:

--- "xfire\xE7\x94\xA8\xE6\x88\xB7\xEF\xBC\x9F\xE8\xAF\xB7\xE7\x82\xB9\xE5\x87\xBB<a dialog-name='account_actions' href='#login' class='dialog_link login add_overlay'>Sign in</a>\xE7\xBC\x96\xE8\xBE\x91\xE4\xBD\xA0\xE7\x9A\x84\xE8\xB4\xA6\xE6\x88\xB7\xE4\xBF\xA1\xE6\x81\xAF"

Данные сериализуются как YAML, и Rails или база данных, похоже, что-то делают для преобразования китайских символов Unicode в этот шестнадцатеричный формат с разделителями обратной косой черты.

Любые идеи, что может происходить? Есть ли способ перевести эти шестнадцатеричные строки в соответствующие символы utf-8?


person Craig Knox    schedule 12.06.2012    source источник


Ответы (1)


Оказывается, проблема была с YAML (см. Rails: проблемы с кодированием при сериализованные хэши, несмотря на кодировку UTF8).

Добавление этого в environment.rb полностью решило проблему:

YAML::ENGINE.yamler= 'syck' if defined?(YAML::ENGINE)
person Craig Knox    schedule 14.06.2012
comment
Примите ваш ответ, если он служит - person nawfal; 19.06.2012