2017-04-07 2 views
0

入力ファイルのエンコーディングに関係なく、grepコマンドの出力をUTF-8でエンコードすることはできますか?grepは結果をUTF-8で出力できますか?

私はpythonスクリプト(サブプロセス)でgrep文を実行します。結果のバイトがUTF-8であることを保証したいと思います。

例:

grep -P "ÄA" -m -1 file.txt 

私はつまり、それは一つのことを行い、それがうまく、この一つのことを行い、

+1

いいえ、それはgrepの仕事ではありません。コーディングのための別のツールがあります: 'iconv'。 –

+3

さらに、「入力ファイルのエンコーディングが何であっても」何かをコード化することは決してできません。あなたは、既知のエンコーディングで何かを再コードすることができます。あなたは明示的にそれを選択します。あなたは、エンコーディングで*推測するツールを使うことができますが、推測は間違っている可能性があります。 –

+0

@MartijnPieters thx:明快さのために、私はそれについて考えましたが、確かなことはありませんでした:-) – Gabriel

答えて

2

Grepのはthe UNIX philosophyを次の...ファイルの入力エンコーディングを知りません。ファイルのエンコーディングはその1つのものではありません。

これは他のツールのためのものです。 の文字のデコードとエンコーディングをよく行うという別のツールがあります。iconvと呼ばれています。これを使用して、入力ファイルのエンコーディングをUTF-8に変更します。

が入力ファイルのエンコーディングを知っている必要があります。わからない場合は、入力ファイルのヒューリスティックな分析に基づいて推測する必要があります(特定の)。誤ったコーデックを使用して何かがデコードされていることを認識すると、 )。 encaと呼ばれるツールもあります。このツールは、推測が行われたら変換を行うこともできます。これは通常、別個のインストールです(これは共通のデフォルトのPOSIXツールセットの一部ではありません)。詳細については、スーパーユーザーのHow to auto detect text file encoding?を参照してください。

ただし、コーデック推測ツールで統計分析を使用する必要がある場合は、grepの出力ではなく、入力ファイルで推測する方がよいことに注意してください。

これはもちろん、Pythonとは関係ありません。代わりにPythonでエンコーディングの検出を行いたい場合を除き、その時点でchardet libraryを見たいと思うでしょう。

関連する問題