Parece ser a presença do caractere nulo no arquivo. (exibido ^ @ geralmente) Eu inseri vários caracteres de controle em um arquivo de texto (como delete, ^?, Por exemplo), e apenas o caractere nulo fez com que o grep o considerasse um binário. Isso só foi testado para o grep. Os comandos less e diff, por exemplo, podem ter métodos diferentes. Caracteres de controle em geral não aparecem exceto em binários. As exceções são os caracteres de espaço em branco: nova linha (^ M), tabulação (^ I), formfeed (^ L), tabulação vertical (^ K) e retorno (^ J).
No entanto, caracteres estrangeiros, como letras árabes ou chinesas, não são ascii padrão, e talvez possam ser confundidos com caracteres de controle. Talvez seja por isso que é apenas o caractere nulo.
Você pode testá-lo inserindo os caracteres de controle em um arquivo de texto usando o editor de texto vim. Basta ir para o modo de inserção, pressione control-v e, em seguida, o caractere de controle.