Python 和 node 读取图片文件不一致的问题?

2017-08-17 13:38:45 +08:00
 wangyufeng

问题是这样的,现在我需要读取一张 jpg 图片的二进制格式,分别采用了 python 和 node 去读,结果读出来的内容不一致,有很大出入。下面贴下源代码和示例图片。

python 的代码

filename = '3.jpg'
fr = open(filename, 'rb')
fileBuffer = fr.read()
fr.close()
print fileBuffer

node 的代码

const fs = require('fs')
fs.readFile('3.jpg', 'utf-8', function (err, data) {
    if (err) throw err;
    console.log(data)
})

这是待读取的图片 3.jpg

经过读取,分别将 python 打印出的 buffer 和 node 打印出的 data 重定向到 txt 文本文件中,并用 beyond compare 比较,出现了很大的不同,如下图所示。

搞不懂为什么。求大拿指点。

1699 次点击
所在节点    问与答
13 条回复
wangyufeng
2017-08-17 13:39:17 +08:00
v2ex 应该添加一个功能,点击图片可以预览原图
wangyufeng
2017-08-17 13:39:41 +08:00
如图示,标红的地方均为不同的地方
hxsf
2017-08-17 13:43:27 +08:00
没看文档? fs.readfile 第二个参数是编码。如果有值会尝试解码。你要读 buffer 别给编码。拿到的就是 buffer
gaolycn
2017-08-17 15:54:48 +08:00
utf-8 是什么鬼
jingniao
2017-08-17 16:34:05 +08:00
第一个你是二进制读,第二个你给个编码,能一样么?
wangyufeng
2017-08-17 16:58:36 +08:00
@gaolycn 如果不指定 utf8 读出来的是 ArrayBuffer。跟 python 的也不一样
gaolycn
2017-08-17 17:38:57 +08:00
@wangyufeng 世上编码千千万,你为何看中了 utf8,所以我们认为这个代码你是瞎写的
gaolycn
2017-08-17 17:41:58 +08:00
你提问的最后一句“搞不懂为什么”,怎么会不知道为什么呢,代码 utf8 明显的错误在这呢。我不懂 node,楼下告诉你正确答案。
noe132
2017-08-17 17:43:27 +08:00
为什么不对比一下源文件呢?你不就知道哪个是正确的哪个是错误的了
coderluan
2017-08-17 17:49:02 +08:00
@wangyufeng #6 二进制和 buffer 自然也不一样。
wangyufeng
2017-08-18 09:25:19 +08:00
@coderluan 那我怎样才能用 node 读出和 python 一样的结果?
wangyufeng
2017-08-18 09:34:28 +08:00
@gaolycn python 返回的数据是什么编码呢?求解
coderluan
2017-08-18 10:09:37 +08:00
@wangyufeng #11 自己去搜搜 nodejs 怎么读二进制

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX