如何检查 Node.js `Buffer` 是否包含有效的 UTF-8?

Luk*_*odt 4 javascript utf-8 node.js

我有一个Buffer对象,我想检查它是否全部都是有效的 UTF-8。理想情况下,我也想得到一个string带有上述解码的 UTF-8 文本。

我尝试了Buffer.toString它采用encoding默认为 的参数utf8。不幸的是,文档是这样说的:

如果encoding'utf8'并且输入中的字节序列不是有效的 UTF-8,则每个无效字节将替换为替换字符U+FFFD

这不是我想要的:我宁愿想要一个异常或一个布尔标志。只需检查结果字符串是否包含U+FFFD与输入文本可能已包含的内容不同U+FFFD(就像有效的 Unicode 代码点一样)。当然,可以尝试U+FFFD在缓冲区和字符串中计数,然后进行比较,但这似乎毫无用处,复杂且低效。

有没有更好的办法?

Кон*_*Ван 5

import NodeBuffer, {Buffer} from "node:buffer";
Run Code Online (Sandbox Code Playgroud)

NodeBuffer.isUtf8(input)

  • 添加于:版本19.4.0、版本18.14.0。
  • input( <Buffer>| <ArrayBuffer>| <TypedArray>)

true如果输入仅包含有效的 UTF-8 编码数据(包括为空的情况),则该函数返回input

如果input是分离的数组缓冲区,则抛出异常。