テキストファイルからUTF-8以外の文字を削除する方法


84

utf-8でエンコードされたアラビア語、英語、ロシア語のファイルがたくさんあります。Perlスクリプトを使用してこれらのファイルを処理しようとすると、次のエラーが発生します。

Malformed UTF-8 character (fatal)

これらのファイルの内容を手動で確認したところ、奇妙な文字がいくつか見つかりました。今、私はこれらの文字をファイルから自動的に削除する方法を探しています。

とにかくそれをすることはありますか?


2
多分それはこれと同じです:stackoverflow.com/questions/7656283/...
オラフDietsche

2
このリンクを参照してください:unix.stackexchange.com/questions/6516/filtering-invalid-utf8
askmish

4
UTF-8以外の文字とは何ですか?整形式のUTF-8文字列のすべての文字はUTF-8(実際にはUnicode)文字です!それらのいくつかは、いくつかの連続したバイトでエンコードされたUTF-8です....
Basile Starynkevitch 2012年

3
@BasileStarynkevitch:エラーメッセージは、不正な形式のUTF-8文字があることを明確に示しています。これは、有効なUTF-8ファイルの一部として表示できないバイトが表示されたことを意味します。それは難しいことではありません。0xC0または0xC1バイト、0xF5..0xFF、またはそうでなければ有効なバイトのシーケンス問題である可能性があります。
ジョナサンレフラー2012

回答:


156

このコマンド:

iconv -f utf-8 -t utf-8 -c file.txt

無効な文字をすべてスキップして、UTF-8ファイルをクリーンアップします。

-f is the source format
-t the target format
-c skips any invalid sequence

11
Macでは「iconv-futf-8 -t utf-8-cfile.txt」。'f'と '8'の間のハイフン
Colin

1
便利なことに、Macでクリップボードの内容を変換できますpbpaste | iconv -f utf-8 -t -utf-8 -c | pbcopy。また、をターゲットにしてすべての特殊文字を削除するためのグローバルショートカットを使用してAlfredワークフローを作成しましたascii
Lenar Hoyt 2014

1
これにより、私にとって完全に空白のファイルが作成されました。これは潜在的に破壊的であることを全員に知らせ、これを実行する前にファイルをバックアップしたいだけです。
2014

5
iconv -f utf-8 -t ascii//TRANSLIT私の問題を解決しました。中引用符を一重引用符に変換します。
パニック大佐2016年

5
-o異なる出力ファイルの場合
codaamok 2016

0

メソッドはバイトごとに読み取り、文字のバイト単位の構成を完全に理解して評価する必要があります。最も簡単な方法は、UTF-8文字のみを出力する以外はすべて読み取るエディターを使用することです。テキストパッドは1つの選択肢です。


iconvはcygwinでは使用できません。Windows / Cygwinでこれを行う方法はありますか?無効な文字を削除する必要がある大きな(100000行以上)XMLファイルがあります。有効なutf-8は気にしません。notepad ++をutf-8に設定しましたが、そこから保存した後でも、XMLパーサーでエラーが発生します
mljm 2017

Windows上のubuntuWSLにはiconvが付属しています
Kat Lim Ruiz

-4
cat foo.txt | strings -n 8 > bar.txt

仕事をします。


10
いいえ、これにより多くの有効なutf-8文字も削除されます。
ザックバート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.