Es inherentemente no sencilla. No hay forma de saberlo con certeza, aunque puede adivinar razonablemente bien en la mayoría de los casos.
cosas que le gustaría hacer:
- Busque números mágicos conocidos en firmas binarias
- Busca el orden de bytes-marca de Unicode en el inicio del archivo
- Si el archivo es regularmente 00 xx 00 xx 00 xx (para arbitrario xx) o viceversa, posiblemente sea UTF-16
- De lo contrario, busque 0 en el archivo; un archivo con un 0 en es poco probable para ser un archivo de texto de codificación de un solo byte.
pero es todo heurística - es muy posible tener un archivo que es un archivo de texto válido y un archivo de imagen válido, por ejemplo. Probablemente sería una tontería como un archivo de texto, pero legítimo en alguna codificación u otra ...
¿Qué es un archivo de texto para usted? ¿UTF-16-BE codifica el conteo Unicode, por ejemplo? –
Debe definir con precisión lo que significa 'binario' y 'texto' antes de que nadie pueda ayudarlo. –
El archivo de texto es cualquier archivo legible por humanos. Digamos, cualquier archivo que pueda leer con un comando "cat" (linux) o "type" (windows). – Thomas