node.js - Node 缓冲区别名 - 二进制是 latin1?

标签 node.js character-encoding

根据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/

相关文章:

javascript - 无法在 console.log 中打印 € 符号?

java - 在 Java 中解码字符 : why is it faster with a reader than using buffers?

node.js - Angular 6 文件上传

mysql - TypeError - indexOf 不是函数(使用 MySQL 进行数据搜索)

html - 从静态 html 页面访问 Express.js 请求或 session

ruby - 如何使用 Net::Http 下载包含 UTF-8 字符的文件?

MySQL 设置行字符集

PHP odbc_result() 似乎在 5.5+ 中为 varchar 字段返回随机未初始化的内存;在 5.4 中工作的相同代码

node.js - 使用文件扩展名 e2e.js 进行排毒模拟

node.js - html 或 Latex 到 pdf 解析器