Estoy creando una aplicación simple donde los usuarios pueden cargar cualquier archivo en el editor de Mónaco en un navegador web.
Estoy tratando de averiguar si el archivo que el usuario ha cargado es texto y, por lo tanto, editable.
En JavaScript, la biblioteca que estoy usando para cargar devuelve el archivo cargado como ArrayBuffer. Por supuesto, puedo convertir esto en texto, independientemente de si es o no texto o binario, y mostrar el resultado en el editor. Presumiblemente, el binario convertido a texto se mostrará como basura en el editor de Mónaco.
También podría examinar el tipo mimo del archivo cargado. Esto contribuiría en gran medida a resolver el problema, pero significa que de alguna manera tengo que saber qué tipos de mimo son texto; no he podido encontrar nada que especifique esto. Además, significa que cualquier archivo sin el conjunto de tipos MIME correcto no será editable.
Entonces, mi pregunta es, ¿hay alguna manera de saber si el contenido de un ArrayBuffer de JavaScript es texto o datos binarios, como una imagen o un código ejecutable, examinando los datos en sí, en lugar de referirse al tipo MIME?
EDITAR: esta pregunta no es un duplicado de las preguntas que simplemente preguntan cómo convertir un ArrayBuffer en texto. Simplemente convertir un ArrayBuffer a texto no indica si se trata de un archivo que contiene texto editable o si es un archivo binario. Se necesita información adicional, como el número mágico sugerido en las respuestas a esta pregunta.
Puede verificar los Magic numbers del ArrayBuffer. Los números mágicos son una especie de constantes en el búfer de archivos que puede verificar para distinguir entre muchos formatos de archivo
Este módulo NPM utiliza ese enfoque. Aquí hay una lista de los tipos de archivos compatibles con el módulo, puede ver que no admiten tipos de texto.
ACTUALIZACIÓN: He escrito un artículo sobre esto que contiene más explicaciones y un poco de Sandbox