在python3中,bytes string和unicodestring是兩種不同的型別。
由於python3中,字串str在記憶體中是以unicode表示,乙個字元對應多個位元組。如果在網上傳輸,就需要將str轉化為以位元組為單位的bytes。
例如,在做套接字試驗時,客戶端與服務端經行資料傳輸時,不進行字元轉換,會報錯。如下,
typeerror:'str' does not support the buffer inte***ce
以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中的字串
字串一旦建立不可更改 在字串當中每個字元都是有對應的位置的 位置一般叫做下表或者索引 小標從左到右從零開始一次遞增 在程式中根據下標線對應的資料,下表是寫在中的 建立字串 a hellow word 訪問字串種的某乙個字元 print a 7 字串的運算 加法運算時拼接操作 字串只能和整數相乘,乘幾...
python 3 比較字串
def cmp str first,second,druge 1 比較兩個字串或者字串列表是否相等 第乙個引數是輸入的第乙個字串或者列表 第二個引數是輸入的第二個字串或者列表 第三個引數是比較對應的列表字串還是比較列表中字串的內容 if druge 1 if len first len second...
python3中bytes hex和字串相互轉換
1 字串轉bytes a abcd a1 bytes a,encoding utf 8 2 bytes轉字串 a b abcd a1 bytes.decode a encoding utf 8 3 16進製制字串轉bytes a 01 02 03 04 05 06 a1 a.replace a2 b...