Estou tendo problemas com um arquivo de texto sendo marcado como um binário

3

Eu tenho um executável que gera um arquivo de texto como saída. O problema é que o arquivo de texto sai com um sinalizador de arquivo binário de algum tipo. O resultado é algo assim:

$ grep "grep string" output_file.txt
Binary file output_file.txt matches.

$ grep -a "grep string" output_file.txt
[correct results]

Algumas leituras indicaram que o grep procura por um caractere nulo nos primeiros mil bytes, e então determina se um arquivo é ou não 'binário', então minha pergunta é dupla:

  1. Existe uma maneira fácil de remover caracteres nulos dos meus arquivos (posso fazer isso como parte do meu pós-processamento) para garantir que o grep funcione corretamente sem o sinalizador -a?

  2. Existe algo óbvio que eu deveria procurar no meu código para evitar que caracteres nulos sejam gravados no arquivo? Eu examinei o código completamente e não vejo nenhum culpado óbvio.

    .

por brightwellcd 18.08.2011 / 18:02

2 respostas

5

Eu posso responder pelo menos a primeira pergunta. Se você estiver usando Unix / Linux, você pode usar tr

tr -d '
tr -d '%pre%0' < filein > fileout
0' < filein > fileout

em que \ 000 é o caractere nulo. Você também pode remover todos os caracteres não imprimíveis, como você pode ver no exemplo aqui: "Edição de texto Unix: sed, tr, cut, od, awk "

Em relação à sua segunda pergunta, eu não sei qual é a sua linguagem de programação, mas eu procuraria variáveis não inicializadas que poderiam ser impressas no arquivo de saída.

    
por 18.08.2011 / 18:42
4

Vou adivinhar ...

Seu programa grava o arquivo em UTF-16, uma codificação de Unicode que usa dois bytes para cada caractere. Cada segundo byte é, na maioria das vezes, um nulo.

iconv -f utf-16 -t utf-8 < filein > fileout

irá convertê-lo para UTF-8, com o qual a maioria dos coreutils está confortável.

    
por 18.08.2011 / 19:07

Tags