长话短说,我正在将Excel文件从Python发送到Javascript。要做到这一点,我需要将其作为字符串发送(非常脏,但这是我这边的一个约束),所以,我“hexlify”(或使用.hex(),任何方法都可以,只要它在Javascript中工作)我的Excel文件在Python中并将其发送到Javascript。
with open(EXCEL_TEMPLATE_OUTPUTS, "rb") as f:
encrypted_bytes = f.read()
return encrypted_bytes.hex()
现在的困难是将它转换回JavaScript中的字节数组,以便我可以创建一个Blob。为此,我使用下面的函数:
var unhexlify = function(str) {
var bytes = [];
for (var i=0, l=str.length; i<l; i+=2) {
bytes.push(String.fromCharCode(parseInt(str.substr(i, 2), 16)));
}
return bytes;
除了一些字符,它的工作相当不错。例如,“c8”被转换为“”而不是“\xc8”。我重建的文件被破坏了。有没有办法克服这个问题?
编辑:下面是一个突出问题的例子:
console.log(String.fromCharCode(parseInt("c8", 16)));
正如你所看到的,它发送的是“”而不是“\xc8”,而在Python中:
from binascii import hexlify, unhexlify
unhexlify("c8")
# b'\xc8'
bytes.fromhex('c8')
# b'\xc8'
2条答案
按热度按时间xqnpmsa81#
我终于找到了一个解决方案,它实际上摆脱了String.fromCharCode()。这里的想法是从Python发送的十六进制创建一个Uint 8Array:
然后我可以基于这个Uint 8Array创建一个blob:
谢谢@Konrad。你引导我走上了正确的道路,找到了解决方案!
oogrdqng2#
可能在编码期间错误在
str.padStart(2,'0')
码中。或者你可以指定一些你想要解码的十六进制