【问题标题】:Node Buffer Alias - binary is latin1?节点缓冲区别名 - 二进制是 latin1?
【发布时间】:2018-11-29 12:21:11
【问题描述】:

根据this page

'binary' - 'latin1' 的别名。

但是,在 latin1 中无法表示二进制,因为缺少某些代码点。因此,像我这样想要将 NodeJS 缓冲区用于二进制数据(一个非常常见的用例)的开发人员会期望使用“二进制”作为编码。似乎没有任何文档可以正确解释如何处理二进制数据!我正在尝试理解这一点。

所以我的问题是:为什么选择 latin1 作为二进制的别名?

人们提到使用 null 作为编码将适用于二进制数据。所以一个后续问题:为什么 null 和 'binary' 不做同样的事情?

【问题讨论】:

    标签: node.js character-encoding


    【解决方案1】:

    Node 文档的“latin1”定义,在问题中引用的“二进制”定义上方的那一行,不是 ISO 8859-1。它是:

    • 'latin1' - 一种将 Buffer 编码为单字节编码字符串的方法 (由 IANA 在 RFC1345 第 63 页中定义为 Latin-1 补充块和 C0/C1 控制代码)。

    RFC 1345 中指定的“latin1”字符集定义了所有 256 个代码点的映射。它没有 ISO 8859-1 映射中 0x00-0x1f 和 0x7f-0x9f 处存在的孔。

    为什么 null 和 'binary' 不做同样的事情?

    节点没有空编码。如果您调用Buffer.from('foo', null),那么您将得到与调用Buffer.from('foo') 相同的结果。即,应用默认编码。默认编码是“utf8”,显然这会产生与“二进制”编码不同的结果。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多