ANSI 以外の文字エンコーディングで文字化けを処理する場合は、次の 2 つのことを確認する必要があります。
ファイルは本当に でエンコードされていX
ますか? (X
あなたの場合、BOMなしのUTF-8です。UTF-8 WITH BOM、UTF-16、latin-1などをUTF-8として読み取ろうとしている可能性があり、それが問題になります)。他のエンコーディングを (変換せずに) 読み込んでみて、適合するものがあるかどうかを確認してください。
ファイルを UTF-8 として読み取るようにロケールまたはテキスト エディターが設定されていますか? そうでない場合は、それが問題である可能性があります。サポートを確認し、設定を変更する方法を見つけてください。Linux では、 localeおよびsetlocaleコマンドを試して、適切に確認および設定してください。
Windows用のnotepad ++(ワインを使用してLinuxでも完全に実行されます)を使用すると、ファイルを変換せずに読み取りたいエンコーディングを設定できる方法が気に入っています(もちろん、ファイルがエンコードされているもの以外を設定するとこれらの奇妙な文字のみが表示されます)、また、あるエンコーディングから別のエンコーディングに変換できる別のオプションもあります。それは私にとってかなり役に立ちました。
あなたが初心者なら、この記事に興味があるかもしれません。文字エンコーディングの内容、理由、方法を簡潔かつ明確に説明しています。
[編集]上記が失敗した場合、windows-1252 やそのような ANSI エンコーディングであっても、unix コマンドを使用して非 ASCII 文字を削除し、それを ASCII に変換する方法をここtr
で学びました (ただし、余分な文字に関する情報はこのコマンドで失われることに注意してください)。出力され、戻ってくることはないので、より良い修正を見つけた場合に備えて、入力ファイルを保持してください):
tr -cd '\11\12\40-\176' < $INPUT_FILE > $OUTPUT_FILE
または、行全体を削除したい場合:
grep -v -P "[^\11\12\40-\176]" $INPUT_FILE > $OUTPUT_FILE
[EDIT 2]ここでのこの回答は、ファイルでエンコーディングが機能しない場合に何が起こるかをかなり推測しています (残念ながら、唯一の直接的な解決策は、問題のある文字を削除することのようです)。