新手问题 Python 和 Node.js 读取图片文件不一致的问题?

aldrich · 2017年08月17日 · 最后由 hammer 回复于 2017年08月22日 · 1500 次阅读

不知道在 ruby 社区问这个会不会被打...,不过 ruby 群牛人多,希望有大牛指点一二。

问题是这样的,现在我需要读取一张 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 比较,出现了很大的不同,如下图所示。

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

不是不一致,而是转译为可见字符的实现不一致

Python 的 open().read() 和 Node.js 的 fs.readFile 读出来结果应该是一样的。

不一样的可能是两个语言的二进制转可见字符串(Binary-to-text encoding)的方式不同

huacnlee 回复

node 这边我指定的编码是 utf8,python 那边没有指定编码,不知道 python 转换的时候采用的是什么编码方式。

都变成 16 进制 试试呗

decode('hex')
需要 登录 后方可回复, 如果你还没有账号请 注册新账号