Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何知道在读取文件时使用什么编码?_Node.js_Http_Encoding_Utf 8_Fs - Fatal编程技术网

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

Node.js 如何知道在读取文件时使用什么编码?,node.js,http,encoding,utf-8,fs,Node.js,Http,Encoding,Utf 8,Fs,读取图像文件时,应使用什么编码?我正在构建一个基本服务器来提供带有图像的html文件,当我读取编码为“utf-8”的图像文件并将数据发送到浏览器时,浏览器不会收到图像。但是,如果我将编码设置为空字符串(即{encoding:''}),浏览器将接收图像。另外,当我查看readstream对象时,它说默认编码是“utf-8”,这让我想知道为什么将编码设置为“utf-8”不起作用 下面是一段不起作用的代码: let readStream = fs.createReadStream('./static/

读取图像文件时,应使用什么编码?我正在构建一个基本服务器来提供带有图像的html文件,当我读取编码为“utf-8”的图像文件并将数据发送到浏览器时,浏览器不会收到图像。但是,如果我将编码设置为空字符串(即{encoding:''}),浏览器将接收图像。另外,当我查看readstream对象时,它说默认编码是“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图像是一个二进制文件,这意味着它是一个普通字节序列<代码>编码设置用于读取文本文件。如果不指定
编码
或传递
null
,您将获得原始字节流,这正是传输二进制数据所需的

表示如果未提供编码,则返回
缓冲区
对象而不是字符串。这就是为什么不应用默认缓冲区编码
utf8

有关更多信息,请参阅: