文字が「?」や「�」になるときの原因と直し方

日本語のはずの部分が ? や � になっていませんか?見た目は似ていますが、原因は別です。ファイル自体は無事で表示だけがおかしいこともあれば、文字がすでに失われていることもあります。どちらなのかを見分ける方法を説明します。

テキストと次のファイルに対応:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Excel の CSV、データベースのダンプ、字幕、Web サイトのコードなど。

修正する

  1. ファイルをドロップ、またはテキストを貼り付け
  2. 自動で修正
  3. コピーまたはダウンロード
またはファイルをここにドラッグ
  • アップロードなし。 ファイルはブラウザー内で修正され、端末の外に出ることはありません。

  • EU 内のサーバー。 Mojibuster は フィンランド(EU)のサーバーで運用しており、EU 一般データ保護規則(GDPR)が適用されます。 GDPR の条文(EUR-Lex、英語)

ケース 1: ファイルは無事で、表示だけが � になる

エディターやブラウザー、プレーヤーで日本語が � だらけになる場合、多くはファイルが Shift_JIS(CP932)や EUC-JP で保存されていて、それを UTF-8 として読んでいます。Shift_JIS の日本語のバイトは UTF-8 としては正しくないため、ソフトが 表示するときに 代わりに � を出しています。ファイルの中には正しいバイトが残っています。

直し方: 元のファイルを上の枠にドロップしてください。Mojibuster が読み込み時に文字コードを判別し、UTF-8 に変換します。大事なのは、ファイルそのものを使うことです。ソフトから文字をコピーして貼り付けると、� がそのまま確定してしまいます。詳しくは Shift_JIS を UTF-8 に変換 をご覧ください。

ケース 2: ? や � が文字として保存されている

ソフトが � の入った状態で保存したり、別のシステムに渡したりした場合、元の文字は失われています。? も同じです。保存先の文字コードにない文字があると、ソフトはそれを ? に置き換えます。たとえば Shift_JIS で保存すると、Shift_JIS にない文字(システムによっては ① や 髙 など)が ? になります。

どの文字も同じ ? になっているため、ここから元の文字を計算で戻すことはできません。Mojibuster は推測で埋めたりせず、該当する箇所の数を表示します。直すには、書き出し直すかバックアップを使うしかありません。

? になるよくある原因

  • データベース: 列や接続が latin1 や sjis なのに、データが UTF-8 で届いている。MySQL は保存できない文字を ? に置き換えます。MySQL と phpMyAdmin を参照してください。
  • メモ帳で「ANSI」保存: 日本語版 Windows の ANSI は Shift_JIS です。Shift_JIS にない文字は保存時に ? になります。
  • PowerShell 5.1: Export-Csv は初期設定で ASCII で書き出すため、日本語が ? になります。PowerShell を参照してください。
  • Python: encode('shift_jis', errors='replace') は変換できない文字を黙って ? に置き換えます。Python と pandas を参照してください。
  • PHP: 文字コードを指定せずに出力すると、ブラウザーが別の文字コードで読み、� が表示されることがあります。
  • コマンドプロンプト: Windows のコンソールは、コードページ(日本語版は 932)にない文字を ? で表示します。多くの場合、おかしいのは表示だけでファイルは無事です。

どちらのケースか見分ける方法

  1. Notepad++ など文字コードを表示できるエディターで開きます。ステータスバーに「Shift_JIS」や「ANSI」と出ていればケース 1 です。
  2. ファイルを Mojibuster にドロップします。Shift_JIS として読み込まれ、日本語が元に戻ればケース 1 です。Shift_JIS を UTF-8 に変換 も参考にしてください。
  3. Mojibuster が失われた文字があると表示した場合はケース 2 です。書き出し直すしかありません。

? ではなく、意味の分からない漢字や記号が並んでいる場合は別の文字化けで、ほとんどの場合は直せます。文字化けとは をご覧ください。

よくある質問

Mojibuster で ? を元の文字に戻せますか?

いいえ。? はどの文字だった可能性もあり、情報が残っていません。Mojibuster はその箇所には手を付けず、いくつあるかを表示します。

あるソフトでは � になり、別のソフトでは正しく表示されるのはなぜ?

ファイルは無事で、片方のソフトが違う文字コードで読んでいるだけです。Mojibuster で UTF-8 に変換すれば、どちらでも正しく表示されます。

� は何の記号ですか?

置換文字(U+FFFD)です。バイトを文字として読めなかったときにソフトが入れる記号で、文字コードの間違いを示しています。本来の文章の一部ではありません。

① や 髙 が ? になるのはなぜ?

保存先の文字コードにその文字がないためです。Shift_JIS では扱えない文字があり、システムによって ① や 髙 が含まれます。UTF-8 で保存すれば ? になりません。

関連ガイド