.png)
Я получил 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 показываеткаждый персонажсоответствие!
Использование iconv
преобразования в ASCII не избавляет от значений \x00, на самом деле это усугубляет проблему, поскольку теперь они выглядят как нулевые байты вместо UTF-8!
$ 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
также удаляет BOM UTF-8:
$ printf %b '\xef\xbb\xbfa'>a;dos2unix a;xxd -p a
dos2unix: converting file a to Unix format...
61
решение3
Также дан ответ на StackOverflow: Как удалить BOM из файла UTF-8? @ричиесть хороший ответ.
Короткий ответ:
- Короткий ответ:
sed -i $'1s/^\uFEFF//' file.txt
, но не на BSD или OS/X. - Другой ответ:
vi file.txt
,:set nobomb
,:w
, простой, но ручной - Установить dos2unuix;
dos2unix -r file.txt
- Эти метки имеют несколько возможных значений, включая то, что файл имеет кодировку UTF-8; см.Статья в Википедии.
- Программы Windows любят добавлять эти метки. Большинство редакторов не удаляют эти метки.