1

私は初心者であることを警告しなければなりません。一部の行にエンコード エラーが含まれているテキスト ファイルがあります。「エラー」により、これは私のLinuxコンソールでファイルを解析するときに得られるものです(文字の代わりに疑問符):

エンコードエラー それらの「疑問符」を示すすべての行を削除したいと思います。問題のある文字を grep -v しようとしましたが、うまくいきません。ファイル自体は UTF8 で、一部の行は別の形式でエンコードされたテキストから来ていると思います。それらを適切に再変換する方法を見つけることができることは知っていますが、今のところそれらを削除したいだけです.

どうすればこれを行うことができるかについて何かアイデアはありますか?

PS: 一部の行には分音符号が含まれていますが、正しく表示されます。「strings」コマンドは、あまりにも多くの「適切な」行を削除するようです。

4

2 に答える 2

2

ANSI 以外の文字エンコーディングで文字化けを処理する場合は、次の 2 つのことを確認する必要があります。

  1. ファイルは本当に でエンコードされていXますか? (Xあなたの場合、BOMなしのUTF-8です。UTF-8 WITH BOM、UTF-16、latin-1などをUTF-8として読み取ろうとしている可能性があり、それが問題になります)。他のエンコーディングを (変換せずに) 読み込んでみて、適合するものがあるかどうかを確認してください。

  2. ファイルを 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]ここでのこの回答は、ファイルでエンコーディングが機能しない場合に何が起こるかをかなり推測しています (残念ながら、唯一の直接的な解決策は、問題のある文字を削除することのようです)。

于 2013-10-02T12:16:13.907 に答える