Tengo un ejecutable que genera un archivo de texto como salida. El problema es que el archivo de texto sale con un indicador de archivo binario de algún tipo. El resultado es algo como esto:
$ grep "grep string" output_file.txt
Binary file output_file.txt matches.
$ grep -a "grep string" output_file.txt
[correct results]
Algunas lecturas han indicado que grep busca un carácter nulo en los primeros mil bytes, luego determina si un archivo es 'binario' o no, por lo que mi pregunta es doble:
¿Hay una manera fácil de quitar caracteres nulos de mis archivos (puedo hacer esto como parte de mi postprocesamiento) para asegurar que grep funcione correctamente sin la bandera -a?
¿Hay algo obvio que debería buscar en mi código para evitar que se escriban caracteres nulos en el archivo? He revisado el código completamente y no veo ningún culpable obvio.
.
Voy a adivinar ...
Su programa escribe el archivo en UTF-16, una codificación de Unicode que usa dos bytes para cada carácter. Cada segundo byte es, la mayoría de las veces, un valor nulo.
lo convertirá a UTF-8, con el que la mayoría de los coreutils se sienten cómodos.
fuente
file myfile.txt
simplemente muestra el archivo comodata
.