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
変換するように指示する必要があります。UTF16LE
UTF8
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
dos2unix
UTF-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プログラムはこれらのタグを追加するのが好きです。ほとんどの編集者はこれらのタグを削除しません。