Проблема с кодировкой символов в импортированной базе данных MyBB

Привет, у меня импортировано множество постов и даже имен пользователей с форума MyBB, которые отображаются как случайные символы вроде ’ и Â.

Судя по отчетам о подобном поведении в WordPress, это может быть проблема кодировки Latin1 против UTF-8?

Есть ли простой способ удалить их постфактум?

Какие именно символы они заменяют? — Я не могу вспомнить, какие исходные символы могли быть подменены.

Также я заметил, что некоторые импортированные посты содержат нераспознанный MyCode. Есть ли способ распарсить его в Discourse?

Да, это моя версия. Сейчас я работаю с импортом, где возникают похожие проблемы. Большинство из них связаны с такими вещами, как «умные» кавычки и длинные тире.

Это далеко не просто, но можно выполнить постобработку, которая либо принудительно изменит кодировку (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?

Экспорт всех данных в формате UTF-8, по возможности, решит эти проблемы.

Я вернулся к исходной установке MyBB и в панели администратора в разделе «Инструменты и обслуживание» → «Состояние системы» обнаружил предупреждение:

Рекомендуется не использовать разные кодировки в вашей базе данных. Это может вызвать непредсказуемое поведение или ошибки MySQL.

Были перечислены таблицы, и я увидел, что большинство из них, но не все, используют формат UTF-8. Похоже, что некоторые, особенно связанные с плагинами, были в более старой кодировке.

Нажатие на ссылку «Преобразовать все» привело к сообщению о том, что файл /inc/config.php необходимо отредактировать для поддержки полного 4-байтового UTF-8:

$config[‘database’][‘encoding’] = ‘utf8mb4’;

После редактирования config.php и повторной попытки преобразования все таблицы теперь отображаются как соответствующие. Попробую повторно импортировать данные в Discourse и сообщу, поможет ли это решить проблемы с символами.

Всё ещё не уверен, как справиться с парсингом MyCode?

Вы не привели никаких примеров или подробностей по этому вопросу — на данном этапе, возможно, лучше создать новую тему, а эту оставить сфокусированной на продолжении обсуждения кодировки символов.

Привет, новая тема с примером находится здесь