首頁  >  問答  >  主體

python 运行.py文件 一加上decode()就报错。。

python 运行.py文件 一加上decode()就报错。。

文件如下:

import socket

HOST, PORT = '127.0.0.1', 8888

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print ('Serving HTTP on port %s ...' % PORT)
while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)
    print (request.decode('utf-8'))

    http_response = """
HTTP/1.1 200 OK

Hello, World!
""".encode("utf-8")
    client_connection.sendall(http_response)
    client_connection.close()

其中的 print (request.decode('utf-8'))不加decode()还能运行,一转码不管decode()括号里面写任何东西或者空着就会报错。。
错误如下所示:

websercer1.py文件我确定是utf-8编码格式的,真心不知道这是什么回事了。。
哪位知道麻烦告知,拜谢。。。

PHP中文网PHP中文网2741 天前436

全部回覆(3)我來回復

  • 阿神

    阿神2017-04-18 09:23:47

    decode 是解碼.
    不關websercer1.py檔案編碼的事情.

    request.decode('編碼') #指的是請求過來你用什麼編碼來解碼...

    你那個錯誤可能 傳過來就已經是UTF-8的編碼了

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:23:47

    雖然你很確定是utf-8編碼,但建議你先保存到txt檔案中看看
    我爬資料常用的一個笨方法就是先把東西無腦寫進txt裡,看看裡面是什麼,這樣比較好debug

    import codecs
    with codecs.open('abc.txt','w','utf-8') as f:
        #do your encode decode    
        f.write(request) # 可能是request.content? request.text?
       
    #then do something with abc.txt

    如果用codecs的utf-8形式無法儲存為txt,那你的內容就應該不是utf-8的了

    回覆
    0
  • 迷茫

    迷茫2017-04-18 09:23:47

    你的編碼原本就是utf-8的,不需要encode,decode。那個encode就是多餘的,(而且你也寫錯了,需要先decode,再encode,所以是多餘的)
    http_response = """HTTP/1.1 200 OK Hello, World!""".decode('utf- 8').encode("utf-8")
    最後運作不出來,可能是socket程式碼寫的有問題了,你再檢查檢查

    回覆
    0
  • 取消回覆