繁体   English   中英

Javascript可以加载Python pickle转储的字符串但不能加载文件

[英]Javascript can load Python pickle dumped string but not file

请看下面的测试代码,我可以使用jpickle库将Python pickle的转储字符串解码回来。

(base):~/python 
Python 3.7.3 (default, Mar 27 2019, 16:54:48) 
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle
>>> pickle.dumps('Hello Python!')
b'\x80\x03X\r\x00\x00\x00Hello Python!q\x00.'
>>> 
(base)~$ node
> const jpickle = require('jpickle');
undefined
> jpickle.loads('\x80\x03X\r\x00\x00\x00Hello Python!q\x00.')
'Hello Python!'

当我尝试将腌制的字符串写入文件时,无法将其重新加载到nodejs中。 我这是怎么了 谢谢!

python代码:

import pickle
with open('test.dat', 'wb') as fout:
    pickle.dump('Hello Python!', fout)

JS:

const fs = require('fs');
const jpickle = require('jpickle');
const binary = fs.readFileSync('test.dat');
const data = jpickle.loads(binary)
console.log(data)

错误消息:

node_modules/jpickle/lib/jpickle.js:341
            throw "Unhandled opcode '" + opcode + "'";
            ^
Unhandled opcode '128'

package.json中的jpickle,需要从GitHub安装,这是最新版本:

    "jpickle": "git+https://github.com/jlaine/node-jpickle.git"
  }

这似乎对我有用。 感谢Tomalak的投入。

const binary = fs.readFileSync('test.dat', "binary");

虽然此解决方案似乎阻止了该过程...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM