INNER CODE UNIT · Python
es_binario
Hainrixz/whatsapp-agentkit · scripts/audit.py:131
def es_binario(ruta: Path) -> bool:
"""
Heuristica: si el primer bloque tiene un byte nulo o no es UTF-8, es binario.
Usamos un decodificador incremental a proposito: leer 4096 bytes puede
cortar un caracter multibyte por la mitad (los recuadros ── de este repo
ocupan 3 bytes), y un decode() comun lo tomaria como binario, salteando
el archivo del chequeo 3 sin decir nada.
"""
try:
with ruta.open("rb") as f:
trozo = f.read(4096)
if b"\x00" in trozo:
return True
codecs.getincrementaldecoder("utf-8")().decode(trozo, final=False)
return False
except (UnicodeDecodeError, OSError):
return True