.png)
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á-lo awk
para analisá-lo, recebo vários bytes nulos, o que suspeito ser devido à 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 este arquivo contém apenas caracteres ASCII (exceto o BOM), mas não posso confirmar isso, pois grep
pensa que é um arquivo binário:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
Procurando pela mesma string no VIM mostracada personagemCoincidindo!
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?
Responder1
A partir dissoartigo da Wikipédia, FF FE
significa UTF16LE
. Então você deve dizer iconv
para converter de UTF16LE
para UTF8
:
iconv -f UTF-16LE -t UTF-8 dotan.csv > fixed.txt
Responder2
dos2unix
também remove BOMs e converte UTF-16 em 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
também remove BOMs UTF-8:
$ printf %b '\xef\xbb\xbfa'>a;dos2unix a;xxd -p a
dos2unix: converting file a to Unix format...
61
Responder3
Também respondido no StackOverflow: Como posso remover o BOM de um arquivo UTF-8? @ricitem uma boa resposta.
Resposta curta:
- Resposta curta:
sed -i $'1s/^\uFEFF//' file.txt
, mas não no BSD ou OS/X. - Outra resposta:
vi file.txt
,:set nobomb
,:w
, simples, mas manual - Instale dos2unuix;
dos2unix -r file.txt
- Essas marcas têm vários significados possíveis, incluindo apenas que o arquivo é UTF-8; Veja oArtigo da Wikipédia.
- Os programas do Windows adoram adicionar essas marcas. A maioria dos editores não removerá essas marcas.