为什么 Node.js 将 BOM 字符转换为 0xFE 0xFF?

Ric*_*yre 5 javascript character-encoding node.js

我一直在使用节点的fs.readFileSync()"utf8"作为编码传递来读取输入。当文件包含UTF8 格式的BOM 字符(0xEF 0xBF 0xBB) 时,它会将其转换为字节序列 0xFE 0xFF,这是 Unicode 编码。

为什么要这样做?为什么不保留 UTF8 中 BOM 的原始序列?

hob*_*bbs 5

BOM 是字符 U+FEFF。0xEF 0xBB 0xBF 是其 UTF-8 表示形式。但是通过使用 utf8 编码读取,您正在解码UTF-8。此时谈论“字节序列”就变得毫无意义了;你有一串字符,第一个字符是 U+FEFF。

  • @RickEyre 作为一个“String”,它应该是一个单一的16位代码点——U+FEFF或“\uFEFF”。并且,不同之处在于 JavaScript `String` 是[基于 UTF-16](http://es5.github.io/#x4.3.16)。因此,要从 UTF-8“Buffer”获取“String”,必须将其转换为 UTF-16。 (4认同)