2017-09-24 6 views
0

이미지 파일을 읽을 때 어떤 인코딩을 사용해야합니까? 이미지가있는 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") 
    }) 

을 그리고 여기에 작업을 수행하는 코드의 조각이다 : JPEG 이미지가 입니다

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

답변

2

이유가된다 파일은 일반 바이트 순서입니다. 파일을 읽을 때 encoding 설정이 사용됩니다. encoding을 지정하지 않거나 null을 전달하면 원시 바이트 스트림을 얻을 수 있습니다. 바로 이진 데이터를 전송하는 데 필요합니다.

Documentation for a Readable Stream에 따르면 인코딩이 제공되지 않으면 문자열 대신 Buffer 개체가 반환됩니다. 이것이 기본 버퍼 인코딩 utf8이 적용되지 않는 이유입니다.

는 추가 정보를 참조하십시오 :

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