1

我正在构建一个简单的应用程序,用户可以在其中将任何文件加载到 Web 浏览器中的 Monaco 编辑器中。

我正在尝试确定用户加载的文件是否是文本,因此是可编辑的。

在 JavaScript 中,我用来加载的库将加载的文件作为 ArrayBuffer 返回。当然,无论它是文本还是二进制,我都可以将其转换为文本,然后将结果扔到编辑器中。大概二进制转换为文本将在摩纳哥编辑器中显示为垃圾。

我还可以检查加载文件的 mime 类型。这将大大有助于解决问题,但这意味着我必须以某种方式知道哪些 mime 类型是文本 - 我无法找到任何指定这一点的东西。此外,这意味着任何没有正确 mime 类型集的文件都将不可编辑。

所以我的问题是,有没有办法通过检查数据本身而不是参考 mime 类型来知道 JavaScript ArrayBuffer 的内容是文本还是二进制数据,例如图像或可执行代码?

编辑:这个问题不是简单地询问如何将 ArrayBuffer 转换为文本的问题的重复。简单地将 ArrayBuffer 转换为文本并不能判断这是一个包含可编辑文本的文件还是一个二进制文件。需要其他信息,例如此问题的答案中建议的幻数。

4

1 回答 1

2

您可以检查Magic numbersArrayBuffer 的。幻数是文件缓冲区中的一种常量,您可以检查它以区分多种文件格式

维基百科 - 幻数

这个 NPM 模块使用这种方法。这是模块支持的文件类型列表,您可以看到它们不支持文本类型。

更新:我写了一篇关于这个的文章,其中包含更多解释和一个小沙盒

于 2021-09-07T23:40:25.400 回答