【问题标题】:Why does Node.js convert BOM character to 0xFE 0xFF?为什么 Node.js 将 BOM 字符转换为 0xFE 0xFF?
【发布时间】:2013-07-20 09:05:05
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js character-encoding


    【解决方案1】:

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

    【讨论】:

    • 那么现在字符串中BOM字符的二进制值是多少呢?是 0xFE 0xFF 吗?我无法理解字节序列和基本上也是字节序列的字符之间的区别,即 0xFE 0xFF 是一个字节序列......
    • @RickEyre 作为String,它应该是一个16位的代码点——U+FEFF或'\uFEFF'。而且,不同之处在于 JavaScript Strings 是 based on UTF-16。因此,要从 UTF-8 Buffer 获取 String,必须将其转换为 UTF-16。
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2016-03-11
    • 2019-04-17
    相关资源
    最近更新 更多