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

aldrich · August 17, 2017 · Last by hammer replied at August 22, 2017 · 1496 hits

不知道在 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)的方式不同

Reply to huacnlee

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

都变成 16 进制 试试呗

decode('hex')
You need to Sign in before reply, if you don't have an account, please Sign up first.