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


10

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

$ 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して解析すると、nullバイトが大量に取得されますが、これはバイトオーダーが原因であると考えられます。このファイルのバイトオーダーを(CLIを使用して)スワップして、通常のツールがそれで動作するようにするにはどうすればよいですか?

このファイルはASCII文字(BOMを除く)だけであるとgrep思いますが、バイナリファイルであるとは考えられないため、確認できません。

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

VIMで同じ文字列を検索すると、一致するすべての文字が表示されます

iconvASCIIへの変換に使用しても\ 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を使用して)スワップして、通常のツールがそれで動作するようにするにはどうすればよいですか?


WindowsまたはMacで作成したCSVファイル?
cuonglm 2014年

ファイルの一部を提供できますか?
cuonglm 2014年

ファイルの固有の問題を保存するファイルの匿名化された部分へのリンクは次のとおりです。ありがとうございました!
dotancohen 2014年

回答:


15

このウィキペディアの記事から、FF FEという意味UTF16LEです。だから、教えてくださいiconvへ変換するのUTF16LEUTF8

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

パーフェクト、ありがとう!UTF-8とUTF-16 BOMを混在させました。FFFEとFEFFはUTF-8だと思い、UTF-16 BOMを知りませんでした。実際、これらはUTF-16 BOMであり、(役に立たない)UTF-8 BOMを知りませんでした!
dotancohen 2014年

@dotancohen:私はFedoraでテストしましたが、tailソリューションは正常に機能します。どのOSを使用していますか?
cuonglm 2014年

これは、WindowsのGit Bashのバージョン「iconv(GNU libiconv 1.14)」では機能しません(つまり、BOMを削除します)。しかし、(どんな理由であれ)UTF-16バイト順バージョンの1つではなく、使用するだけで機能します。
ケニーエビット2017年

3

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

dos2unix また、UTF-8 BOMも削除されます。

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

0

StackOverflowでも回答: BOMをUTF-8ファイルから削除するにはどうすればよいですか? @riciは良い答えを持っています。

簡潔な答え:

  • 短い答え:sed -i $'1s/^\uFEFF//' file.txt、ただしBSDやOS / Xではありません。
  • 別の答え:vi file.txt:set nobomb:w、シンプルでありながらマニュアル
  • dos2unuixをインストールします。 dos2unix -r file.txt
  • これらのマークには、ファイルがUTF-8であることだけを含め、いくつかの可能な意味があります。ウィキペディアの記事をご覧ください。
  • Windowsプログラムはこれらのマークを追加するのが大好きです。ほとんどの編集者はこれらのマークを削除しません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.