python3中字符串问题

在python3中,bytes string和unicodestring是两种不同的类型。


由于python3中,字符串str在内存中是以unicode表示,一个字符对应多个字节。如果在网上传输,就需要将str转化为以字节为单位的bytes。

例如,在做套接字试验时,客户端与服务端经行数据传输时,不进行字符转换,会报错。如下,

TypeError:'str' does not support the buffer interface


以unicode表示的str通过encode()方法按制定的编码方式编码为指定的bytes。

例如,data.encode(‘utf-8’),data.encode('ascii')


在另一方面,从网络中读取数据,读到的数据时bytes。就要把bytes转换为str,就需要decode()方法。

data.decode('utf-8')



ps:最近在看核心编程(第三版),在做实验时就遇到了此问题。

下面时服务端代码:

#!/usr/bin/python3.4
# -*- coding: utf-8 -*-
from socket import socket,AF_INET,SOCK_STREAM
from time import ctime

def main():

    HOST=''
    PORT=21570
    BUFFSIZE=1024
    ADDR=(HOST,PORT)

    tcpSerSock = socket(AF_INET,SOCK_STREAM)
    tcpSerSock.bind(ADDR)
    tcpSerSock.listen(5)
    while True:
        print("waiting for connection...")
        tcpClientSock,addr = tcpSerSock.accept()
        print("...connected from:{}".format(addr))

        while True:
            data = tcpClientSock.recv(BUFFSIZE).decode('utf-8')
            if not data:
                break
            tcpClientSock.send(data.encode('utf-8'))
        tcpClientSock.close()
    tcpSerSock.close()
if __name__ == '__main__':
    main()

客户端代码

#!/usr/bin/python3.4
# -*- coding: utf-8 -*-
from socket import socket,AF_INET,SOCK_STREAM

def main():
    HOST='localhost'
    PROT=21570
    BUFFSIZE=1024
    ADDR=(HOST,PROT)

    tcpClientSock = socket(AF_INET,SOCK_STREAM)
    tcpClientSock.connect(ADDR)
    while True:
        data = input('> ')
        if not data:
            break
        tcpClientSock.send(data.encode('utf-8'))
        data = tcpClientSock.recv(BUFFSIZE).decode('utf-8')
        if not data:
            break
        print(data)
    tcpClientSock.close()

if __name__ == '__main__':
    main()



你可能感兴趣的:(python3中字符串问题)