节点缓冲区别名-二进制是latin1吗?

时间:2018-11-28 14:42:19

标签: node.js character-encoding

根据this page

  

'binary'-'latin1'的别名。

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

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

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

1 个答案:

答案 0 :(得分: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'做同样的事情?

节点没有null编码。如果您呼叫Buffer.from('foo', null),则得到的结果与您呼叫Buffer.from('foo')的结果相同。也就是说,将应用默认编码。默认编码为'utf8',很明显,该编码可能会产生与'二进制'编码不同的结果。