python3我需要4\u0000\但是得到4\x00\

2024-10-04 01:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我完全不理解以下内容:

我需要用json发送一条如下所示的消息:

ff = "4\x00\xe6\x8c\xc0b\x02c\x023\x02\x01\x02\x00\xe2\xea\xa8\xab\x02\xd6\x92\xe8\x87\x02\x88\xfd\x01\x0ez\x94\x01\x02B\x02\x00\x02\x00\x00"  

print (json.dumps({"a":ff}))

{"a": "4\u0000\u00e6\u008c\u00c0b\u0002c\u00023\u0002\u0001\u0002\u0000\u00e2\u00ea\u00a8\u00ab\u0002\u00d6\u0092\u00e8\u0087\u0002\u0088\u00fd\u0001\u000ez\u0094\u0001\u0002B\u0002\u0000\u0002\u0000\u0000"}

但是,python中的原始名称如下所示:

gg =  b'4\x00\xe6\x8c\xc0b\x02c\x023\x02\x01\x02\x00\xe2\xea\xa8\xab\x02\xd6\x92\xe8\x87\x02\x88\xfd\x01\x0ez\x94\x01\x02B\x02\x00\x02\x00\x00'



print (json.dumps({"a": repr(gg)[2:-1]}))

{"a": "4\\x00\\xe6\\x8c\\xc0b\\x02c\\x023\\x02\\x01\\x02\\x00\\xe2\\xea\\xa8\\xab\\x02\\xd6\\x92\\xe8\\x87\\x02\\x88\\xfd\\x01\\x0ez\\x94\\x01\\x02B\\x02\\x00\\x02\\x00\\x00"}

我真的不明白其中的区别,但我需要用u0发送消息,而不是另一个。我该如何解决?有什么区别

我需要的是ff被当作gg抛弃

为什么??我通过zmq从python向go传递消息,并从go解码avro。当我将二进制代码硬编码为字符串(ff)时,所有代码都在go中工作。当我在python中有一个二进制文件并将其转换为字符串并发送到go时,它无法解码。我让我的json将\U置于\x之上,我很好

更新:

如果我做到了以下几点,它就会起作用:

json.dumps({"a": gg.decode('unicode-escape') })
{"a": "4\u0000\u00e6\u008c\u00c0b\u0002c\u00023\u0002\u0001\u0002\u0000\u00e2\u00ea\u00a8\u00ab\u0002\u00d6\u0092\u00e8\u0087\u0002\u0088\u00fd\u0001\u000ez\u0094\u0001\u0002B\u0002\u0000\u0002\u0000\u0000"}

Tags: json消息goffx00ggx01x02
1条回答
网友
1楼 · 发布于 2024-10-04 01:26:40

您需要将字节转换为字符串。问题是-字符串的正确字符集是什么?我尝试通过使用

print (json.dumps({"a": str(gg, 'windows-1252')}))

但是得到

"4\u0000\u00e6\u0152\u00c0b\u0002c\u00023\u0002\u0001\u0002\u0000\u00e2\u00ea\u00a8\u00ab\u0002\u00d6\u2019\u00e8\u2021\u0002\u02c6\u00fd\u0001\u000ez\u201d\u0001\u0002B\u0002\u0000\u0002\u0000\u0000"

这是相似但不完全相同的。我试过“utf-8”,但失败了,因为

UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 2-3: invalid continuation byte

所以不要去那里。但我认为这是你前进的道路

repl.it here

相关问题 更多 >