2013-01-05 21 views
0

我一定是做错了。Python变量与编码sendall()

s.sendall((str("mkd /" + folder.decode() + "/New Folder/ \r\n")).encode()) 

有没有更好的方法来写这个?

+0

sendall是否返回字符串? – Hussain

+0

是的,但蟒蛇3要求一个字节字符串 – mb0742

回答

1
s.sendall(b"mkd '/" + folder + b"/New Folder/'\r\n") 

下面是一个使用shlex.quote()在Python 3.3(pipes.quote()在老的Python版本),更强大的版本:

cmd = "mkd {}".format(shlex.quote(posixpath.join(folder, "New Folder"))) 
s.sendall(cmd.encode() + b"\r\n") # send as utf-8 

后者假定folder是Unicode字符串。如果folder是一个字节对象,那么您不应该盲目地使用folder.decode(),因为不能保证folder被编码为utf-8。 os.fsdecode()是否可用于解码它取决于folder来自哪里。

+0

明智的只是在第二个连接的字符串前添加b。你是冠军! – mb0742