Pab*_*eco 3 python string bytearray python-3.x
我有一个函数,它接受一个字符串,通过套接字发送它,并将其打印到控制台.将字符串发送到此函数会产生一些警告,在尝试修复它们时会变成其他警告.
功能:
def log(socket, sock_message):
sock_message = sock_message.encode()
socket.send(sock_message)
print(sock_message.decode())
Run Code Online (Sandbox Code Playgroud)
我试图以这种方式调用我的函数:
log(conn, "BATT " + str(random.randint(1, 100)))
Run Code Online (Sandbox Code Playgroud)
而且,为简单起见:
log(conn, "SIG: 100%")
Run Code Online (Sandbox Code Playgroud)
有了这两个log电话,我明白了Type 'str' doesn't have expected attribute 'decode'.所以相反,我看到你可以传递一个字符串作为字节数组,bytes("my string", 'utf-8')但后来我得到了警告Type 'str' doesn't have expected attribute 'encode'.
我100%肯定我只是缺少一些关于如何在python中传递字符串的关键信息,那么普遍接受的方法是什么?
编辑:
如下所述,STR的不可兼得decode,并encode和我通过在同一个变量做既困惑我的IDE.我通过为bytes版本维护一个单独的变量来修复它,这解决了这个问题.
def log(sock, msg):
sock_message = msg.encode()
sock.send(sock_message)
print(sock_message.msg())
Run Code Online (Sandbox Code Playgroud)
dsh*_*dsh 10
在Python 2中,处理字符(字符串)和处理字节时,你可能会非常草率(有时会侥幸逃脱).Python 3通过使它们成为两种不同的类型来解决这个问题:str和bytes.
您编码转换str 为 bytes.许多字符(特别是非英语/ US-ASCII字符)需要两个或更多字节来表示它们(在许多编码中).
您解码以转换bytes 为 str.
因此,你不能解码一个str.您需要对其进行编码以进行打印或将其发送到需要字节(文件,套接字等)的任何位置.您还需要使用正确的编码,以便字节的接收器可以正确解码它并接收正确的字符.对于一些US-ASCII就足够了.许多人更喜欢使用UTF-8,部分原因是因为US-ASCII可以处理的所有字符在UTF-8中是相同的,但UTF-8可以处理(其他)Unicode字符.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |