我有以下脚本读取并打印图像为字符串:
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)
但是2个脚本输出的字符串之间有一点点区别。我使用以下Go代码尝试了同样的事情,输出与PHP&#39; s相同:
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()表现不同?
答案 0 :(得分:2)
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
答案 1 :(得分:1)
Garbage in, garbage out。如果你告诉Node你的二进制图片文件是一个编码为UTF-8的纯文本文件,那么难怪你会得到意想不到的结果。
另一方面,您的PHP代码只打印读取的确切字节。