根据this page :
'binary' - Alias for 'latin1'.
但是,二进制在 latin1 中无法表示,因为缺少某些代码点。因此,像我这样想要将 NodeJS 缓冲区用于二进制数据(极其常见的用例)的开发人员会期望使用“二进制”作为编码。似乎没有任何文档正确解释如何处理二进制数据!我正在尝试理解这一点。
所以我的问题是:为什么选择 latin1 作为二进制的别名?
人们提到使用 null 作为编码适用于二进制数据。那么接下来的问题是:为什么 null 和 'binary' 不做同样的事情?
最佳答案
Node 文档中“latin1”的定义(位于问题中引用的“binary”定义上方的行)不是 ISO 8859-1。它是:
- 'latin1' - A way of encoding the Buffer into a one-byte encoded string (as defined by the IANA in RFC1345, page 63, to be the Latin-1 supplement block and C0/C1 control codes).
RFC 1345 中指定的“latin1”字符集定义了所有 256 个代码点的映射。它不存在 ISO 8859-1 映射中 0x00-0x1f 和 0x7f-0x9f 处存在的漏洞。
Why doesn't null and 'binary' do the same thing?
Node 没有空编码。如果您调用Buffer.from('foo', null)
那么你会得到与调用 Buffer.from('foo')
相同的结果。即,应用默认编码。默认编码是“utf8”,显然这会产生与“二进制”编码不同的结果。
关于node.js - Node 缓冲区别名 - 二进制是 latin1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521987/