V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wangyufeng
V2EX  ›  问与答

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

  •  
  •   wangyufeng · 2017-08-17 13:38:45 +08:00 · 1779 次点击
    这是一个创建于 2660 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    13 条回复    2017-08-18 10:09:37 +08:00
    wangyufeng
        1
    wangyufeng  
    OP
       2017-08-17 13:39:17 +08:00
    v2ex 应该添加一个功能,点击图片可以预览原图
    wangyufeng
        2
    wangyufeng  
    OP
       2017-08-17 13:39:41 +08:00
    如图示,标红的地方均为不同的地方
    hxsf
        3
    hxsf  
       2017-08-17 13:43:27 +08:00 via iPhone
    没看文档? fs.readfile 第二个参数是编码。如果有值会尝试解码。你要读 buffer 别给编码。拿到的就是 buffer
    gaolycn
        4
    gaolycn  
       2017-08-17 15:54:48 +08:00
    utf-8 是什么鬼
    jingniao
        5
    jingniao  
       2017-08-17 16:34:05 +08:00 via Android
    第一个你是二进制读,第二个你给个编码,能一样么?
    wangyufeng
        6
    wangyufeng  
    OP
       2017-08-17 16:58:36 +08:00
    @gaolycn 如果不指定 utf8 读出来的是 ArrayBuffer。跟 python 的也不一样
    gaolycn
        7
    gaolycn  
       2017-08-17 17:38:57 +08:00 via Android
    @wangyufeng 世上编码千千万,你为何看中了 utf8,所以我们认为这个代码你是瞎写的
    gaolycn
        8
    gaolycn  
       2017-08-17 17:41:58 +08:00 via Android
    你提问的最后一句“搞不懂为什么”,怎么会不知道为什么呢,代码 utf8 明显的错误在这呢。我不懂 node,楼下告诉你正确答案。
    noe132
        9
    noe132  
       2017-08-17 17:43:27 +08:00
    为什么不对比一下源文件呢?你不就知道哪个是正确的哪个是错误的了
    coderluan
        10
    coderluan  
       2017-08-17 17:49:02 +08:00
    @wangyufeng #6 二进制和 buffer 自然也不一样。
    wangyufeng
        11
    wangyufeng  
    OP
       2017-08-18 09:25:19 +08:00
    @coderluan 那我怎样才能用 node 读出和 python 一样的结果?
    wangyufeng
        12
    wangyufeng  
    OP
       2017-08-18 09:34:28 +08:00
    @gaolycn python 返回的数据是什么编码呢?求解
    coderluan
        13
    coderluan  
       2017-08-18 10:09:37 +08:00
    @wangyufeng #11 自己去搜搜 nodejs 怎么读二进制
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3220 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:16 · PVG 21:16 · LAX 05:16 · JFK 08:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.