Я получил файл .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 (за исключением спецификации), но я не могу подтвердить это, так как 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), чтобы с ним работали обычные инструменты?
источник
Ответы:
Из этой статьи википедии ,
FF FE
значитUTF16LE
. Так что вы должны сказать,iconv
чтобы преобразовать изUTF16LE
вUTF8
:источник
tail
решение работает отлично. Какую ОС вы используете?UTF-16
вместо одной из версий порядка следования байтов работает.dos2unix
также удаляет спецификации и преобразует UTF-16 в UTF-8:dos2unix
также удаляет спецификации UTF-8:источник
Также ответил на StackOverflow: Как я могу удалить спецификацию из файла UTF-8? У @rici хороший ответ.
Короткий ответ:
sed -i $'1s/^\uFEFF//' file.txt
но не на BSD или OS / X.vi file.txt
,:set nobomb
,:w
, простой , но руководствоdos2unix -r file.txt
источник