【问题标题】:What is happening to the output of this conversion, and why isn't it what I think it should be?这个转换的输出发生了什么,为什么不是我认为的那样?
【发布时间】:2014-10-06 01:45:57
【问题描述】:

我正在尝试用 Python 编写一个简短的程序,将字符串从十六进制转换为字节,然后从字节转换为 base64。我有一个十六进制的基本字符串,相当于 base64 中的字符串。程序如下所示:

import codecs

basecode = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"
DesiredResult = "SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t"
e = codecs.decode(basecode, 'hex')
print(e)
y = codecs.encode(e, 'base64')
print(y)
z = bytes.decode(y, 'utf-8')
print(z)
print(DesiredResult)

if y == DesiredResult:
    print("Success!")

我从程序中得到的输出如下:

b"I'm killing your brain like a poisonous mushroom"
b'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'
SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t

SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t

我相信你可以想象,这很令人沮丧,因为这意味着虽然我已经接近了,但我实际上并没有完成我打算做的事情。

那么,如何修改这个程序以确保我的转换输出与变量DesiredResult 完全相同?

我知道它与出现在转换中的\n 有关,但我不知道它是如何到达那里的,我也不知道如何摆脱它。

非常感谢任何和所有建议。

【问题讨论】:

  • encode base64 添加一个换行符。所以把它剥掉。
  • 我该如何剥离它?

标签: python hex base64 byte codec


【解决方案1】:

base64 codec 总是在末尾添加一个 \n 字节。

将操作数转换为 MIME base64(结果总是包含结尾的 '\n')

要去除最后一个\n 字节,请像这样使用Python slicing operator

>>> y
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'
>>> DesiredResult
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t'
>>> y[:-1]
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t'
>>> y[:-1] == DesiredResult
True

【讨论】:

  • 这几乎可以正常工作,但对我来说,执行 y[:-1] 的输出如下所示:b'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t' 我假设这是因为它以字节格式存储 - 任何提示如何转换回来?
猜你喜欢
  • 2020-10-23
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2022-11-16
相关资源
最近更新 更多