UTF-8テキストファイルがあるかどうかを確認する方法品目明細コマンドラインから?
file
コマンドは以下を表示します。
UTF-8 Unicode text
しかし、これがファイルにBOMがないことを意味するかどうかはわかりません。
Ubuntu 12.04を使用しています。
答え1
file
あれば教えてください品目明細。簡単にテストできます。
printf '\ufeff...\n' | file -
/dev/stdin: UTF-8 Unicode (with BOM) text
一部のシェル(たとえば、ash
または)にはサポートされていない組み込みコマンドdash
があり、その場合はGNU coreutils(たとえば)を使用する必要があります。printf
\u
printf
/usr/bin/printf
注:変更ログによると、file
この機能は2007年から使用されました。したがって、これは現在すべてのコンピュータで動作します。
答え2
実行すると、stat fileName
正確に3つの文字が表示されます。エディタでファイルを開くと、何も表示されません。したがって、ファイルサイズが3であることがわかると、ファイルにBOMがあることが明らかになります。
また、投稿はここ私にとってとても役に立ちました。
hexdump -n 3 -C 2.txt
00000000 ef bb bf
ef bb bf // YES
答え3
別の変形 - dos2unix
:
$ dos2unix -ib *.txt
no-bom f1.txt # this file has no BOM
utf-8 f2.txt # this file has BOM + UTF-8
このコマンドには、BOMの追加や削除などのファイル形式を変更するオプションがあります。
答え4
BOMを持つUTF-8ファイルは、3バイト0xef 0xbb 0xbfで始まります。これはU + FEFF文字のUTF-8エンコーディングです。
ファイルの最初の3バイトを読むと、bashでこれらのファイルを効率的に見つけることができます。
find . -type f -size +2c -print0 |
while IFS= read -rd '' file; do
IFS= LC_ALL=C read -rd '' -n3 first3 < "$file" &&
[[ $first3 = $'\xef\xbb\xbf' ]] &&
printf '%s\n' "$file"
done
ファイルの残りの部分が有効なUTF-8であることを確認しませんが、どちらもfile
経験的な方法です。