У меня есть следующие сценарии, которые читают и печатают изображение в виде строки:
PHP:
<?php
echo file_get_contents("/path/to/small.png");
Node.js:
var fs = require('fs')
var file = fs.readFileSync('/path/to/small.png', 'utf8');
console.log(file)
Но есть небольшая разница между строками, выводимыми двумя сценариями. Я попробовал то же самое со следующим кодом Go, и результаты идентичны PHP:
package main
import (
"fmt""io/ioutil")
func main() {
buf, err := ioutil.ReadFile("/path/to/small.png")
if err != nil {
panic(err)
}
content := string(buf)
fmt.Println(content)
}
Итак, кто-нибудь понял, почему fs.readFile () ведет себя по-другому?
var fs = require('fs')
var file = fs.readFileSync('/path/to/small.png', 'binary');
console.log(file)
Рекомендации:
https://nodejs.org/dist/latest-v7.x/docs/api/fs.html#fs_fs_readfilesync_file_options
https://github.com/nodejs/node/blob/master/lib/buffer.js#L432
Мусор, мусор из. Если вы скажете Node, что ваш двоичный файл изображения представляет собой простой текстовый файл в кодировке UTF-8, неудивительно, что вы получите неожиданные результаты.
С другой стороны, ваш код PHP просто печатает точные прочитанные байты.