python3中字串問題

2021-07-10 17:26:53 字數 1995 閱讀 8583

在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...