O formato do arquivo é provavelmente o UTF-16 little-endian. Alguns aplicativos no Windows parecem padrão para isso e causam muitos problemas de porabilidade.
vi
representa bytes valorizados ASCII-Nul (numericamente zero) como '^ @' (control-At). Você pode inserir bytes com valor zero em vim
com o acorde control-shift- @.
grep
deve ver os bytes NII ACII, em vez de interpretar o arquivo como UTF-16 e, em seguida, ver os pontos de código Unicode para '2' ou '0' ou o que for. Eu não vejo uma opção na página GNU grep
man para fazer com que ele lide com UTF - qualquer coisa.
cat
não mostra os bits ASCII-Nul, o emulador de terminal em questão os mostraria, mas qualquer que seja o emulador de terminal que você esteja usando, estará ignorando-os. Se você usar cat cl.txt | od -x
ou melhor, cat cl.txt | xxd
, verá os bytes ASCII-Nul na saída de cat
. Se você vir algo como 'ffef' ou 'efff' como os dois primeiros bytes do arquivo, eles são o "byte order mark" promulgado pela Microsoft contra todo o senso comum.
Não tenho certeza do que recomendar para transliterar UTF-16 para ASCII ou UTF-8, iconv
maybe, mas nunca usei isso.