BOMで始まるファイル処理(FF FE)

BOMで始まるファイル処理(FF FE)

BOMを含む.csvファイルを受け取りましたFF FE

$ head -n1 dotan.csv | hd
00000000  ff fe 41 00 64 00 20 00  67 00 72 00 6f 00 75 00  |..A.d. .g.r.o.u.|

を使用して解析すると、awk多くのヌルバイトが表示されますが、これはエンディアンによるものと思われます。一般的なツールで使用できるように、CLIを使用してこのファイルのバイト順序をどのように変更できますか?

ファイルはASCII文字でしか見えませんが(BOMを除く)、grepバイナリファイルのように見えるため、確認できません。

$ grep -P '^[\x00-\x7f]' dotan.csv 
Binary file dotan.csv matches

VIMで同じ文字列表示を検索するすべての役割マッチ!

ASCIIへの変換を使用すると、iconv\ x00の値は削除されず、UTF-8ではなくNULLバイトのように見えるため、実際に問題が悪化します。

$ iconv -f UTF-8 -t ASCII dotan.csv > fixed.txt 
iconv: illegal input sequence at position 0

$ iconv -f UTF-8 -t ASCII//IGNORE dotan.csv > fixed.txt

$ head -n1 fixed.txt | hd
00000000  41 00 64 00 20 00 67 00  72 00 6f 00 75 00 70 00  |A.d. .g.r.o.u.p.|

一般的なツールで使用できるように、CLIを使用してこのファイルのバイト順序をどのように変更できますか?

答え1

したがって、ウィキペディア記事FF FE方法UTF16LE。したがって、以下からiconv変換するように指示する必要があります。UTF16LEUTF8

iconv -f UTF-16LE -t UTF-8 dotan.csv > fixed.txt

答え2

dos2unixまた、BOMを削除し、UTF-16をUTF-8に変換します。

$ printf %s あ|recode ..utf16 >a;xxd -p a;dos2unix a;xxd -p a
feff3042
dos2unix: converting file a to Unix format...
e38182

dos2unixUTF-8 BOMも削除されました。

$ printf %b '\xef\xbb\xbfa'>a;dos2unix a;xxd -p a
dos2unix: converting file a to Unix format...
61

答え3

StackOverflowにも答えがあります。 UTF-8ファイルからBOMを削除するには? @rici良い答えがあります。

短い答え:

  • 短い答え:sed -i $'1s/^\uFEFF//' file.txtしかし、BSDやOS / Xには該当しません。
  • もう一つの答え:、、、、vi file.txtシンプルですが手動:set nobomb:w
  • dos2unuixをインストールします。dos2unix -r file.txt
  • これらのフラグには、ファイルがUTF-8であることを含むいくつかの意味があります。ウィキペディア記事
  • Windowsプログラムはこれらのタグを追加するのが好きです。ほとんどの編集者はこれらのタグを削除しません。

関連情報