如何知道读取文件时使用的编码?

时间:2017-09-24 20:13:59

标签: node.js http encoding utf-8 fs

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

以下是不起作用的代码:

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")
    })

以下是可行的代码:

#!python
#cython: boundscheck=False, wraparound=False, infer_types=True,cdivision = True
from libcpp.unordered_map cimport unordered_map

1 个答案:

答案 0 :(得分:2)

原因是JPEG图像是二进制文件,这意味着它是一个普通字节序列。阅读 text 文件时使用encoding设置。如果您没有指定encoding或传递null,那么您将获得原始字节流,这正是您传输二进制数据所需的。

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

有关其他信息,请参阅:

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