【问题标题】:python3 can't convert bytes to object 'str' implicitypython3无法将字节转换为对象'str'隐式
【发布时间】:2017-02-04 10:29:10
【问题描述】:

我在其他问题中尝试了一些解决方案,但无法解决。这是我的代码:

#/usr/bin/env python
#-*- coding: UTF-8 -*-
import socket
import sys
ip = "192.168.0.28"
port = 21
data = "hckn"*250
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn = s.connect((ip,port))
except:
    print("[-] Baglanti basarisiz")
    sys.exit()

s.recv(1024)
s.send("USER anonymous\r\n".encode('utf-8'))
s.recv(1024)
s.send("PASS anonymous\r\n".encode('utf-8'))
print("[+]Gizli baglanti saglandi")


s.recv(1024)

s.send('MKD'+data+'\r\n'.encode('ascii'))
print("Data yollandı")
s.recv(1024)
s.send('QUIT\r\n'.encode('utf-8'))
s.close()

print("[+]Program yakinda hata verecek...")

当我删除“编码”并运行它 Python2 时,它工作正常。但不是在 Python3 上,它说

s.send('MKD'+data+'\r\n'.encode('ascii'))

TypeError: can't convert bytes to object 'str' implicity

【问题讨论】:

  • Python 3 中的默认编码是 unicode,所以你不需要指定coding(第 2 行)

标签: python python-3.x typeerror python-sockets


【解决方案1】:

这是因为缺少括号:

s.send(('MKD'+data+'\r\n').encode('ascii'))
#      ^                 ^

但典型的解决方案是只使用字节开头:

data = b"hckn"*250
s.send(b'MKD'+data+b'\r\n')

【讨论】:

    【解决方案2】:

    在那条线上:

    s.send('MKD'+data+'\r\n'.encode('ascii'))
    

    您需要在 'MKD'+data+'\r\n' 周围加上括号。像这样:

    s.send(('MKD'+data+'\r\n').encode('ascii'))
    

    【讨论】:

      猜你喜欢
      • 2013-05-17
      • 2015-03-17
      • 2014-08-03
      • 2016-04-15
      • 2015-01-18
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多