2017-09-24 4 views
0

Beim Lesen einer Bilddatei welche Kodierung soll ich verwenden? Ich baue einen Basis-Server, um eine HTML-Datei mit einem Bild zu erstellen, und wenn ich die Bilddatei mit der Codierung von 'Utf-8' lese und die Daten an den Browser sende, empfängt der Browser das Bild nicht. Wenn ich die Codierung jedoch auf eine leere Zeichenfolge festlege (d. H. {Encoding: ''}), empfängt der Browser das Bild. Wenn ich mir das read-stream-Objekt anschaue, heißt das, dass die Standardcodierung "utf-8" ist, was mich wundern lässt, warum die Codierung auf "utf-8" nicht funktioniert.Wie kann man wissen, welche Codierung beim Lesen von Dateien verwendet wird?

Hier ist das Stück Code, das nicht funktioniert:

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

Und hier ist das Stück Code, das funktioniert:

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

Antwort

2

Der Grund hierfür ist, dass JPEG-Bild ein binäre ist Datei, was bedeutet, dass es sich um eine Folge von einfachen Bytes handelt. encoding Einstellung wird beim Lesen Text Dateien verwendet. Wenn Sie encoding nicht angeben oder null übergeben, erhalten Sie einen rohen Stream von Bytes, das ist genau das, was Sie zum Übertragen binärer Daten benötigen.

Documentation for a Readable Stream besagt, dass Buffer Objekt zurückgegeben wird, wenn keine Codierung bereitgestellt wird, anstelle von Zeichenfolge. Aus diesem Grund wird die Standardpuffercodierung utf8 nicht angewendet.

Siehe für weitere Informationen:

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