字符串为字节python3

时间:2013-02-03 20:56:05

标签: python string byte python-3.2

假设我有字符串(应该是一个字节):

"b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"

我希望解码它,但它说它必须以字节为单位,所以我必须以某种方式将其转换为

b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='

我正在聊天客户端,当它发送数据(字节)时,它会以某种方式变成一个字符串,当它通过服务器时,当它到达另一侧时,它无法解码它

ps:它是ENCRYPT,解码会给出随机数字和字母,客户端会解密它

哦,而且,我真的不知道'='符号应该在那里,当我在我和我的朋友之间的测试中获得数据时,我得到它就像那个字符串( top)错误说它必须是字节。

客户端中的部分代码(只显示一行,其余部分是秘密):

base64.b64decode(that_string).decode('ascii')

它主要使用ascii所以我认为这是对的,对吗?

更多信息:

base64.b64encode(message.encode('ascii'))

此处的消息是用于获取从另一方发送的字符串

Room.message(str(secretEncrypt(par, codes())))

我不知道我是怎么想念它的,它在它发送=。=之前就是它 好吧,它仍然需要把它变成字节,我怎么这样做?

3 个答案:

答案 0 :(得分:3)

以下内容非常有用

>>> import base64
>>> s = "Hello StackOwerflow!"
>>> b = s.encode()
>>> c = base64.b64encode(b)
>>> c
b'SGVsbG8gU3RhY2tPd2VyZmxvdyE='
>>> b1 = base64.b64decode(c) 
>>> b1
b'Hello StackOwerflow!'
>>> b1.decode()
'Hello StackOwerflow!'

显示你如何编码字符串

答案 1 :(得分:3)

问题在于:

Room.message(str(secretEncrypt(par, codes())))

secretEncrypt(...)返回字节,但是你执行str(b"thereturnvalue") 做你想做的事情:

>>> my_bytes = b"abc"
>>> type(my_bytes)
<class 'bytes'>
>>> str(my_bytes)
"b'abc'"
>>> type(str(my_bytes))
<class 'str'>

将字节的字符串表示(repr)放入字符串中,这就是为什么字符串以b"

开头的原因

如何最好地解决这个问题取决于周围的代码..或者:

  • 如果secretEncrypt函数返回字节,则使Room.message也接受字节(并删除str(...)强制转换)。
  • secretEncrypt返回一个字符串,无需str(...)强制转换
  • 最优雅的解决方案:解码从secretEncrypt返回的字节,将其转换为字符串。像这样:

    encrypted = secretEncrypt(par, codes())
    Room.message(encrypted.decode("whatever-encoder-was-used"))
    

    whatever-encoding-was-used是文本编码的位置(可能是utf-8ascii,但如果没有看到其他代码就无法判断)

答案 2 :(得分:0)

我是对的,不需要过度思考

字符串:

"b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"

只需要拆分,例如:

string = "b'YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo='"
string = string.split("'")[1]

这会让我得到一个没有b'的字符串:

"YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo="

然后我只需要字节:

string = bytes(string, "ascii")

这会让我在字符串外面找到b':

b"YzJGNVltYzJGNVltOTBlbk5oZVdKdmRIcHpZWGxpYjNSNmMyRjVZbTkwZW5OaGVXSnZkSHB6WVhsaWIzUjZjMkY1WW05MGVnOTBlblJsYzNRPXNheWJvdHo="

ps:对于那些谈论破解我的代码的人来说,它得到了randoms 如果你设法破解它,它没有太大用处,无论如何,它只是一个聊天客户端为孩子们的迷你聊天室游戏的mumbo jumbo事物