Puede ser útil explicar cómo funcionan los archivos en el nivel más bajo:
Un archivo es una secuencia de bytes, cero o más de longitud. Un byte es de 8 bits. Como hay 256 combinaciones de 8 bits, eso significa que un byte es cualquier número del 0 al 255. Por lo tanto, cada archivo es, en su nivel más bajo, un gran trozo de números que van del 0 al 255.
Depende completamente de los programas y usuarios decidir qué "significan" los números. Si queremos almacenar texto, entonces probablemente sea una buena idea usar los números como código, donde a cada número se le asigna una letra. Eso es lo que hacen ASCII y Unicode. Si queremos mostrar texto, entonces probablemente sea una buena idea construir un dispositivo o escribir un programa que pueda tomar estos números y mostrar un mapa de bits similar al código ASCII / Unicode correspondiente. Eso es lo que hacen los terminales y los emuladores de terminal.
Por supuesto, para los gráficos, probablemente queremos que los números representen píxeles y sus colores. Luego, necesitaremos un programa que revise el archivo, lea todos los bytes y muestre la imagen en consecuencia. Un emulador de terminal espera que los bytes sean números ASCII / Unicode y se comportará de manera diferente, para la misma porción de bytes (o archivo).