问题是这样的,现在我需要读取一张 jpg 图片的二进制格式,分别采用了 python 和 node 去读,结果读出来的内容不一致,有很大出入。下面贴下源代码和示例图片。
filename = '3.jpg'
fr = open(filename, 'rb')
fileBuffer = fr.read()
fr.close()
print fileBuffer
const fs = require('fs')
fs.readFile('3.jpg', 'utf-8', function (err, data) {
if (err) throw err;
console.log(data)
})
经过读取,分别将 python 打印出的 buffer 和 node 打印出的 data 重定向到 txt 文本文件中,并用 beyond compare 比较,出现了很大的不同,如下图所示。
1
wangyufeng OP v2ex 应该添加一个功能,点击图片可以预览原图
|
2
wangyufeng OP 如图示,标红的地方均为不同的地方
|
3
hxsf 2017-08-17 13:43:27 +08:00 via iPhone
没看文档? fs.readfile 第二个参数是编码。如果有值会尝试解码。你要读 buffer 别给编码。拿到的就是 buffer
|
4
gaolycn 2017-08-17 15:54:48 +08:00
utf-8 是什么鬼
|
5
jingniao 2017-08-17 16:34:05 +08:00 via Android
第一个你是二进制读,第二个你给个编码,能一样么?
|
6
wangyufeng OP @gaolycn 如果不指定 utf8 读出来的是 ArrayBuffer。跟 python 的也不一样
|
7
gaolycn 2017-08-17 17:38:57 +08:00 via Android
@wangyufeng 世上编码千千万,你为何看中了 utf8,所以我们认为这个代码你是瞎写的
|
8
gaolycn 2017-08-17 17:41:58 +08:00 via Android
你提问的最后一句“搞不懂为什么”,怎么会不知道为什么呢,代码 utf8 明显的错误在这呢。我不懂 node,楼下告诉你正确答案。
|
9
noe132 2017-08-17 17:43:27 +08:00
为什么不对比一下源文件呢?你不就知道哪个是正确的哪个是错误的了
|
10
coderluan 2017-08-17 17:49:02 +08:00
@wangyufeng #6 二进制和 buffer 自然也不一样。
|
11
wangyufeng OP @coderluan 那我怎样才能用 node 读出和 python 一样的结果?
|
12
wangyufeng OP @gaolycn python 返回的数据是什么编码呢?求解
|
13
coderluan 2017-08-18 10:09:37 +08:00
@wangyufeng #11 自己去搜搜 nodejs 怎么读二进制
|