繁体   English   中英

Python Socket utf-8 解码

[英]Python Socket utf-8 decoding

我想将 GET 请求的响应转换为字符串,我想出了以下代码:

 import socket target_host = "www.google.com" target_port = 80 # create a socket object s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # connect the client s.connect((target_host, target_port)) # send some data request = "GET / HTTP/1.1\\r\\nHost:%s\\r\\n\\r\\n" % target_host s.send(request.encode("utf-8")) full_msg = "" # Prevent recv() function to stop the script to wait until it receives more data, even if there is no more. s.settimeout(1) flag = True while flag: # receive some data try: response = s.recv(4096) full_msg = full_msg + str(response) print("Adding msg") except Exception as e: print(full_msg) flag = False print(e) print("Loop ended") print(type(full_msg))
问题是,当我尝试对 s.recv(4096) 中的响应进行解码时,将其替换为以下代码:

 response = s.recv(4096).decode("utf-8")

我收到以下异常:

 'utf-8' codec can't decode byte 0xe8 in position 1025: invalid continuation byte

我不知道如何解决这个问题,因为我无法修改我从响应中得到的字符,我需要删除“b'”字符,如果我每次都没有解码它会弄乱我的 full_msg 字符串环形。

此外,在文档中它说 .recv() 方法返回一个字符串,但我似乎得到了一个类似字节的对象。 欢迎任何想法,我也很乐意知道我的代码可以改进的任何方式。

根据您响应中的数据, Content-Type: text/html; charset=ISO-8859-1 Content-Type: text/html; charset=ISO-8859-1 响应不是 UTF-8。 .decode('iso-8859-1')代替。 更好的是使用requests

import requests
r = requests.get('https://www.google.com')
print(r.status_code)
print(r.headers['content-type'])
print(r.encoding)
# print(r.text)    # already decoded with r.encoding
# print(r.content) # byte string of original encoded data
# print(r.json())  # If the response is JSON data, This loads the data.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM