インポートした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

ただし、本番データを実行する前に、ステージングサイト上で十分にテストすることをお勧めします。

ありがとう、ジェイ。
元のデータベースから問題の根本を解決する巧妙な方法はありませんか?つまり、古いフォーラムからデータベースを再エクスポートし、文字やマイコードの問題を含まない状態で再インポートすることです。

まだ公開していない場合、最初からやり直すことも可能です。それが最善の方法です。

サイトはまだ正式に公開されていませんが、MyBBからのエクスポート時に文字コードの問題とmycodeの解析をどのように処理するのが最善でしょうか?

可能であれば、すべてのデータを UTF-8 でエクスポートすることで、これらの問題が解決されます。

元の MyBB インストールに戻り、管理パネルの「ツールとメンテナンス」>「システムヘルス」で警告を見つけました。

データベースで異なるエンコーディングを使用しないことをお勧めします。予期しない動作や MySQL エラーの原因となる可能性があります。

テーブルがリスト表示されており、大部分は UTF-8 形式ですが、すべてがそうではないことがわかりました。特にプラグインに関連するいくつかのテーブルは、古い形式のようでした。

「すべて変換」リンクをクリックすると、完全な 4 バイト UTF-8 をサポートするには /inc/config.php の編集が必要だというレスポンスが表示されました。

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

config.php を編集して再度変換を試みると、すべてが一致するようになりました。文字の問題が解消するか確認するため、Discourse への再インポートを試みて結果を報告します。

ただ、MyCode のパース処理についてはまだどのように対処すればよいか不明です。

これについては例や詳細が含まれていませんでした。この段階では、新しいスレッドを作成して、このスレッドは文字エンコーディングに関するフォローアップに集中させるのが最善かもしれません。

こんにちは、例を含む新しいスレッドはこちらです。