gpt4 book ai didi

node.js - 如何知道读取文件时使用什么编码?

转载 作者:可可西里 更新时间:2023-11-01 17:05:32 31 4
gpt4 key购买 nike

读取图像文件时应该使用什么编码?我正在构建一个基本服务器来提供带有图像的 html 文件,当我读取编码为“utf-8”的图像文件并将数据发送到浏览器时,浏览器没有收到图像。但是,如果我将编码设置为空字符串(即 {encoding: ''}),浏览器会收到图像。此外,当我查看读取流对象时,它说默认编码是“utf-8”,这让我想知道为什么将编码设置为“utf-8”不起作用?

这是一段不起作用的代码:

let readStream = fs.createReadStream('./static/002.jpg', {flags: 'r', encoding: 'utf8'})
console.log('ReadStream: ', readStream)
res.setHeader('Content-Type', 'image/jpeg')
readStream.on('data', (chunk) => {
res.write(chunk)
})

readStream.on('error', (err) => {
console.log(err)
})

readStream.on('end', () => {
console.log('Image stream ended')
res.end()
})

readStream.on('close', function(){
console.log("Image Stream closed")
})

下面是一段有效的代码:

let readStream = fs.createReadStream('./static/002.jpg', {flags: 'r', encoding: ''})
console.log('ReadStream: ', readStream)
res.setHeader('Content-Type', 'image/jpeg')
readStream.on('data', (chunk) => {
res.write(chunk)
})

readStream.on('error', (err) => {
console.log(err)
})

readStream.on('end', () => {
console.log('Image stream ended')
res.end()
})

readStream.on('close', function(){
console.log("Image Stream closed")
})

最佳答案

原因是 JPEG 图像是一个二进制 文件,这意味着它是一个纯字节序列。 encoding 设置用于读取文本 文件。如果您不指定 encoding 或传递 null,您将获得原始字节流,这正是您传输二进制数据所需要的。

Documentation for a Readable Stream 表示如果未提供编码,则返回 Buffer 对象而不是字符串。这就是未应用默认缓冲区编码 utf8 的原因。

有关更多信息,请参阅:

  1. Node.js v8.5.0 Documentation: Buffers and Character Encodings

关于node.js - 如何知道读取文件时使用什么编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46394411/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com