ケース 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)にない文字を
?で表示します。多くの場合、おかしいのは表示だけでファイルは無事です。
どちらのケースか見分ける方法
- Notepad++ など文字コードを表示できるエディターで開きます。ステータスバーに「Shift_JIS」や「ANSI」と出ていればケース 1 です。
- ファイルを Mojibuster にドロップします。Shift_JIS として読み込まれ、日本語が元に戻ればケース 1 です。Shift_JIS を UTF-8 に変換 も参考にしてください。
- Mojibuster が失われた文字があると表示した場合はケース 2 です。書き出し直すしかありません。
? ではなく、意味の分からない漢字や記号が並んでいる場合は別の文字化けで、ほとんどの場合は直せます。文字化けとは をご覧ください。
よくある質問
Mojibuster で ? を元の文字に戻せますか?
いいえ。? はどの文字だった可能性もあり、情報が残っていません。Mojibuster はその箇所には手を付けず、いくつあるかを表示します。
あるソフトでは � になり、別のソフトでは正しく表示されるのはなぜ?
ファイルは無事で、片方のソフトが違う文字コードで読んでいるだけです。Mojibuster で UTF-8 に変換すれば、どちらでも正しく表示されます。
� は何の記号ですか?
置換文字(U+FFFD)です。バイトを文字として読めなかったときにソフトが入れる記号で、文字コードの間違いを示しています。本来の文章の一部ではありません。
① や 髙 が ? になるのはなぜ?
保存先の文字コードにその文字がないためです。Shift_JIS では扱えない文字があり、システムによって ① や 髙 が含まれます。UTF-8 で保存すれば ? になりません。