我试图将这个C代码(编码和序列化)转换为Pyhton,但结果不同。为什么?
var dictt = new Dictionary<string, object>
{
{ "aaa", "6mjDx3Cya4JvbTLMenPpXA==" },
{ "bbb", "4U5M+V2yoIA7rWj46rdhTBgpEjf1zYK0m11lDM7DRCI="},
};
JavaScriptSerializer serialzr = new JavaScriptSerializer();
return Convert.ToBase64String(Encoding.UTF8.GetBytes(serialzr.Serialize(dictt))); //eyJpdiI6IjZtakR4M0N5YTRKdmJUTE1lblBwWEE9PSIsInZhbHVlIjoiNFU1TStWMnlvSUE3cldqNDZyZGhUQmdwRWpmMXpZSzBtMTFsRE03RFJDST0ifQ==
dictt = {
"aaa": "6mjDx3Cya4JvbTLMenPpXA==",
"bbb": "4U5M+V2yoIA7rWj46rdhTBgpEjf1zYK0m11lDM7DRCI="
}
y = json.dumps(dictt)
#y= {"aaa": "6mjDx3Cya4JvbTLMenPpXA==", "bbb": "4U5M+V2yoIA7rWj46rdhTBgpEjf1zYK0m11lDM7DRCI="}
json_object = json.loads(y) #convert it to json, like serialize in C#
# json_object = {'aaa': '6mjDx3Cya4JvbTLMenPpXA==', 'bbb': '4U5M+V2yoIA7rWj46rdhTBgpEjf1zYK0m11lDM7DRCI='}
json_object_utf8_encoded = str(json_object).encode('utf8') #encode utf8
#json_object_utf8_encoded = b"{'aaa': '6mjDx3Cya4JvbTLMenPpXA==', 'bbb': '4U5M+V2yoIA7rWj46rdhTBgpEjf1zYK0m11lDM7DRCI='}"
json_base64 = base64.b64encode(json_object_utf8_encoded) #convert to base64 string
#json_base64 = "b'eydpdic6ICc2bWpEeDNDeWE0SnZiVExNZW5QcFhBPT0nLCAndmFsdWUnOiAnNFU1TStWMnlvSUE3cldqNDZyZGhUQmdwRWpmMXpZSzBtMTFsRE03RFJDST0nfQ=='"
json_base64_str = json_base64.decode("utf-8")
return json_base64_str
#eydpdic6ICc2bWpEeDNDeWE0SnZiVExNZW5QcFhBPT0nLCAndmFsdWUnOiAnNFU1TStWMnlvSUE3cldqNDZyZGhUQmdwRWpmMXpZSzBtMTFsRE03RFJDST0nfQ==
以下两个python命令之间有一个很小的差异,导致两个不同的输出:
"
与'
而这个,
产出:
这个:
产出:
使用后一种方法:不必要地反序列化json,然后对其调用
str
,得到不同的结果。只需停止json.loads
步骤编辑:
返回的值(C#vs python)仍然不匹配,因为C#序列化程序(无论是
JavaScriptSerializer
还是Newtonsoft中更常见的JsonConvert.Serialize
)输出的json没有空格:python的
json.dumps
输出带有空格的json时:即使您将缩进参数传递给
json.dumps
(例如,json.dumps(dict, indent=2)
),您也不能用JavaScriptSerializer
来实现这一点,尽管您可以用Newtonsoft的JsonConvert.Serialize
来实现,但它仍然不起作用,因为后者使用CRLF字符进行缩进,而python则不起作用也就是说,这不重要,因为逻辑输出是相同的:序列化字典的Base64编码
相关问题 更多 >
编程相关推荐