ファイルがUTF-8かどうかを確認するLinuxコマンドはありますか?


14

Joomla .iniファイルはUTF-8として保存する必要があります。

編集後、ファイルがUTF-8かどうかわかりません。

fileファイルが本当にUTF-8であるかどうかを知らせるようなLinuxコマンドやいくつかのコマンドはありますか?


4
ファイルのエンコーディングはわかりません。賢い推測しかできません。あなたはほとんど正しいと推測するかもしれませんが、推測が失敗することもあります。fileスマートな推測を行うプログラムの例です。
Marco

1
@Marco:ただし、それが有効なUTF-8であるかどうかを確認することは可能です。有効なUTF-8として誤って渡される可能性のあるエンコードがいくつかありますが、ISO-8859-𝒏またはWindows-125𝒏エンコード/文字セットではほとんど発生しません。
user1686

回答:


28

次のコマンドでファイルのエンコーディングを確認できます。

file -bi filename

3
@nicolas MacOSの場合、試すことができますfile -I filename(-Iは大文字のiです)。
Rik

5
これはファイル全体を読み取りますか?
ctrl-alt-delor 2018年

2
@ kojow7 utf-8にはヘッダーがありません。純粋なASCII(7ビットのみ)は、utf-8と区別できません(つまり、ヘッダーはあらゆる種類の問題を引き起こします)。したがって、最初のMBがASCIIであるファイルに単一のUTF-8文字が含まれている場合、ファイル全体を読み取らない限り、そのことはわかりません。
ctrl-alt-delor 2018

3
これは答えとして受け入れられるべきではありません。「file」コマンドはそれを行いません。ファイルの一部のみを読み取り、マジックナンバーを使用して最適な推測を行います。時々「ファイル」はあなたに間違った答えを与えることができ、与えるでしょう。ファイルがascii、iso-8859-1、utf-8などのエンコーディングを通過するかどうかを確認するには、 'iconv'コマンドを使用することをお勧めします。
ティム

1
私はそれをテストしました、そしてそれは失敗することができて、失敗します。
ティム

9

@davidpostill私は好奇心旺盛ですが、参考文献で著者を引用するのは悪い習慣ですか?
パブロオルモスデアギレラC.

いいえ。しかし、良い、それは私をリードリンク発言を作るための練習。青いテキストだけを読んでいるとしましょう。編集後、なぜ、いつクリックする必要があるのか​​がわかります。以前はできませんでした。(編集したのは私ではありませんでしたが、94%がこれがそうであると確信しています。)
HermannDöppes2018

find -type f -exec isutf8 {} +ファイル名も引用符で囲んでいるので、でうまく動作します。(そして使用するfind ... -exec ... +と高速でもあります)
Tomasz Gandor

2

fileコマンドは使用しないでください。ファイル全体を検査するのではなく、基本的に推測します。それは時々間違った答えを出します。

ファイルが次のようなUTF-8エンコーディングを渡しているかどうかを確認できます。

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

ゼロの戻りコードは、UTF8を渡すことを意味します。ゼロ以外の戻りコードは、有効なUTF8ではないことを意味します。

一部のエンコード方式が重複しているため、特定のエンコード方式を使用してファイルをエクスポートする必要があるかどうかを知ることはできません。これを行うには、メタデータをファイルに埋め込む必要があり、その場合でも、自分で検証するのではなく、そのファイルを生成した人に信頼を置くことになります。そして、常に自分で検証する必要があります。


0

さらにもう1つの方法は、を使用することですrecode。これは、UTF-8をデコードしようとして無効な文字を検出するとエラーで終了します。

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.