Recebi um arquivo .csv com a FF FE
BOM:
$ 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.|
Ao usá awk
-lo para analisá-lo, estou recebendo um monte de bytes nulos, que suspeito que sejam devidos à ordem dos bytes. Como posso trocar a ordem dos bytes neste arquivo (usando a CLI) para que as ferramentas normais funcionem com ele?
Observe que acho que esse arquivo é apenas caracteres ASCII (exceto a BOM), mas não posso confirmar isso como grep
pensa que é um arquivo binário:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
Procurar a mesma sequência no VIM mostra todos os caracteres correspondentes!
Usar iconv
para converter para ASCII não elimina os valores \ x00; na verdade, piora o problema, pois agora eles parecem bytes nulos em vez de 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.|
Como posso trocar a ordem dos bytes neste arquivo (usando a CLI) para que as ferramentas normais funcionem com ele?
fonte
Respostas:
A partir deste artigo da wikipedia ,
FF FE
significaUTF16LE
. Portanto, você deve dizericonv
para converter deUTF16LE
paraUTF8
:fonte
tail
solução funciona bem. Qual SO você usa?UTF-16
invés de uma das versões da ordem de bytes funciona.dos2unix
também remove BOMs e converte UTF-16 em UTF-8:dos2unix
também remove BOMs UTF-8:fonte
Também respondido no StackOverflow: Como remover a BOM de um arquivo UTF-8? @rici tem uma boa resposta.
Resposta curta:
sed -i $'1s/^\uFEFF//' file.txt
mas não no BSD ou no OS / X.vi file.txt
,:set nobomb
,:w
, simples, mas o manualdos2unix -r file.txt
fonte