Tengo un pequeño archivo png llamado small.png . Espero que el siguiente código de Node.js sea equivalente a un cat del archivo. Sin embargo, claramente estoy leyendo algo incorrectamente, ya que el resultado es diferente, y redirigir la salida a un nuevo archivo da como resultado algo que ni siquiera es reconocible como PNG.
node -e 'console.log(require("fs").readFileSync("static/small.png", "utf8").toString())'O, ampliado:
const fs = require("fs"); console.log(fs.readFileSync("static/small.png").toString());Sospeché que podría ser un problema de codificación, pero "utf16le" parecía menos parecido al original.
Un archivo binario no se puede reproducir como una cadena utf8, a menos que sea una cadena utf8 en primer lugar.
fs.createReadStream no tiene codificación por defecto y se puede canalizar a la salida estándar del proceso del nodo.
const stream = require("fs").createReadStream("small.png") stream.pipe(process.stdout) % cat small.png | sha256sum 065453ee61387cec8383a2337c488a3f65e709f52637efd5f97c1efe6c333f2b - % node -e 'st = require("fs").createReadStream("small.png"); st.pipe(process.stdout)' | sha256sum 065453ee61387cec8383a2337c488a3f65e709f52637efd5f97c1efe6c333f2b -