**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由错字或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我正在尝试将一些scala代码重构到python3中,目前还在解码base64的字符串,Python的base64.b64decode的输出与Scala的输出不匹配。
斯卡拉:
import org.apache.commons.codec.binary.Base64.decodeBase64
val coded_str = "UgKgDwhoEAAANAEA1tYAADABABoBABMAAAAAAQAAAAEAAQACAAAAAAD6sT4AO0YAAA=="
decodeBase64(coded_str)
//Output 1 :
res1: Array[Byte] = Array(82, 2, -96, 15, 8, 104, 16, 0, 0, 52, 1, 0, -42, -42, 0, 0, 48, 1, 0, 26, 1, 0, 19, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, -6, -79, 62, 0, 59, 70, 0, 0)
coded_str.getBytes()
//Output 2
res2: Array[Byte] = Array(85, 103, 75, 103, 68, 119, 104, 111, 69, 65, 65, 65, 78, 65, 69, 65, 49, 116, 89, 65, 65, 68, 65, 66, 65, 66, 111, 66, 65, 66, 77, 65, 65, 65, 65, 65, 65, 81, 65, 65, 65, 65, 69, 65, 65, 81, 65, 67, 65, 65, 65, 65, 65, 65, 68, 54, 115, 84, 52, 65, 79, 48, 89, 65, 65, 65, 61, 61)
在Python中,我尝试:
import base64
coded_str = 'UgKgDwhoEAAANAEA1tYAADABABoBABMAAAAAAQAAAAEAAQACAAAAAAD6sT4AO0YAAA=='
print (base64.b64decode(coded_str))
#Output 1 :
b'R\x02\xa0\x0f\x08h\x10\x00\x004\x01\x00\xd6\xd6\x00\x000\x01\x00\x1a\x01\x00\x13\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x02\x00\x00\x00\x00\x00\xfa\xb1>\x00;F\x00\x00'
#Command 2:
b = [ord(s) for s in coded_str]
print (b)
#Output 2
[85, 103, 75, 103, 68, 119, 104, 111, 69, 65, 65, 65, 78, 65, 69, 65, 49, 116, 89, 65, 65, 68, 65, 66, 65, 66, 111, 66, 65, 66, 77, 65, 65, 65, 65, 65, 65, 81, 65, 65, 65, 65, 69, 65, 65, 81, 65, 67, 65, 65, 65, 65, 65, 65, 68, 54, 115, 84, 52, 65, 79, 48, 89, 65, 65, 65, 61, 61]
尝试从python获取输出1以匹配Scala的输出。
输出2匹配,但idk如何从这里转换它。
任何帮助都将不胜感激。谢谢!
试图在Python中得到我在Scala中看到的相同结果。
Array(82, 2, -96, 15, 8, 104, 16, 0, 0, 52, 1, 0, -42, -42, 0, 0, 48, 1, 0, 26, 1, 0, 19, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, -6, -79, 62, 0, 59, 70, 0, 0)
型
2条答案
按热度按时间kpbwa7wx1#
你会得到相同的输出......只是字节
vyswwuz22#
不,这是一样的。
这一点:
b '请注意:飞
还有这个
分辨率1:数组[字节] =数组(82、2、-96、15、8、104、16、0、0、52、1、0、-42、-42、0、0、48、1、0、26、1、0、19、0、0、0、0、1、0、1、0、2、0、0、0、0、0、-6、-79、62、0、59、70、0、0)
实际上是完全相同的序列。
82是大写字母R的ascii代码,因此scala端的
82
和R
(python二进制字符串中的第一个字符)都表示:一个字节,其值为82。第二个字节是
\x02
pythonside和2 scalaside,同样的,unicode为2的字符是不可打印的,所以python把它写成\x02
,这是相同的字节。依此类推。-96与\xa0 = \xa0相同,它以无符号十六进制表示,而-96表示完全相同的位序列,但将其打印为2的补码有符号二进制。撤消2的补码(求反位,然后加1):96 = 0110 0000。翻转所有位,然后加1:1001和1111,添加1:1010 0000,即128+32 = 160,用十六进制表示:160等于16的a(10)倍所以...
python字符串末尾的70有一个“F”,因为70是大写F的unicode,等等。
一般来说,不要试图像这样打印原始字节,因为这会让人感到困惑。