UTF-8ファイルからBOMを削除するには?

UTF-8ファイルからBOMを削除するには?

BOMを含むUTF-8エンコーディングファイルがあり、BOMを削除したいと思います。ファイルからBOMを削除するLinuxコマンドラインツールはありますか?

$ file test.xml
test.xml:  XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines

答え1

ファイルにUTF-8 BOMが含まれているかどうかわからない場合(仮想GNU実装sed)、BOMがある場合は削除し、存在しない場合は変更しません。

sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt

次のオプションを使用して既存のファイルを上書きすることもできます-i

sed -i '1s/^\xEF\xBB\xBF//' orig.txt

BSDバージョン(macOSなど)を使用している場合は、sedbashにエスケープを実行させる必要があります。

 sed $'1s/\xef\xbb\xbf//' < orig.txt > new.txt

答え2

UTF-8では、BOMは意味がありません。これは通常、Microsoftオペレーティングシステムの偽のソフトウェアのバグのために追加されます。

dos2unixこれは削除され、Windowsテキストファイルの他の属性が処理されます。

dos2unix test.xml

答え3

VIMの使用

  1. VIMでファイルを開きます。

     vi text.xml
    
  2. BOMエンコーディングの削除:

     :set nobomb
    
  3. ファイルを保存して終了します。

     :x
    

非対話型ソリューションの場合は、次のコマンドラインを試してください。

vi -c ":set nobomb" -c ":wq" text.xml

これにより、BOMが削除され、ファイルが保存され、コマンドラインがすべて終了します。

答え4

このために、私はしばしばvim one-linerを使います。

vim --clean -c 'se nobomb|wq' filename

vim --clean -c 'bufdo se nobomb|wqa' filename1 filename2 ...

関連情報