Да, это моя версия. Сейчас я работаю с импортом, где возникают похожие проблемы. Большинство из них связаны с такими вещами, как «умные» кавычки и длинные тире.
Это далеко не просто, но можно выполнить постобработку, которая либо принудительно изменит кодировку (force_encoding), либо попытается заменить символы по одному.
Что-то вроде
Post.all.each do |post|
post.raw = post.raw.force_encoding('utf-8').encode("Windows-1252").force_encoding('utf-8')
post.save!
post.rebake!
end
Но перед запуском на живых данных обязательно тщательно протестируйте это на тестовом сайте.
Спасибо, Джей.
Есть ли какой-нибудь хитрый способ решить проблему у источника — например, переэкспортировать базу данных из старого форума, а затем импортировать её заново, избавившись от проблем с символами и mycode?
Я вернулся к исходной установке MyBB и в панели администратора в разделе «Инструменты и обслуживание» → «Состояние системы» обнаружил предупреждение:
Рекомендуется не использовать разные кодировки в вашей базе данных. Это может вызвать непредсказуемое поведение или ошибки MySQL.
Были перечислены таблицы, и я увидел, что большинство из них, но не все, используют формат UTF-8. Похоже, что некоторые, особенно связанные с плагинами, были в более старой кодировке.
Нажатие на ссылку «Преобразовать все» привело к сообщению о том, что файл /inc/config.php необходимо отредактировать для поддержки полного 4-байтового UTF-8:
$config[‘database’][‘encoding’] = ‘utf8mb4’;
После редактирования config.php и повторной попытки преобразования все таблицы теперь отображаются как соответствующие. Попробую повторно импортировать данные в Discourse и сообщу, поможет ли это решить проблемы с символами.
Всё ещё не уверен, как справиться с парсингом MyCode?
Вы не привели никаких примеров или подробностей по этому вопросу — на данном этапе, возможно, лучше создать новую тему, а эту оставить сфокусированной на продолжении обсуждения кодировки символов.