@Maxim1997_21

Проблема с кодировкой на стороне сервера Python. Как сделать, чтобы русские символы тоже отображались корректно?

Есть сервер, принимающий get запросы. Для удобства делаю get запросы через браузер. как "http://localhost:8080/Максим" - вместо русских символов получается белиберда.

Вот код
import os
import socket
import time

#метод ответа на запрос, где data = ответ клиенту
def send_answer(conn, status="200 OK", typ="text/plain; charset=utf-8", data=""):
data = data.encode("utf-8")
conn.send(b"HTTP/1.1 " + status.encode("utf-8") + b"\r\n")
conn.send(b"Server: simplehttp\r\n")
conn.send(b"Connection: close\r\n")
conn.send(b"Content-Type: " + typ.encode("utf-8") + b"\r\n")
conn.send(b"Content-Length: " + bytes(len(data)) + b"\r\n")
conn.send(b"\r\n")
conn.send(data)

#обработка get-Запроса. принимает подключение и адрес
def get_on(conn, addr):
data = b""

while not b"\r\n" in data:
tmp = conn.recv(1024)
if not tmp:
break
else:
data += tmp

if not data:
return

udata = data.decode("utf-8") #уже пробовал менять кодировки здесь !!! не помогает
udata = udata.split("\r\n", 1)[0]
method, addres, protocol = udata.split(" ", 2) #method - тип запроса; addres - параметры запроса (/web/cgi-1.html); protocol - http.1.1 ;

if method == "GET":
print(addres) # !!!!!!!!!!! В ЭТОМ МЕСТЕ ВМЕСТО /Максим - выводиться белиберда. Как поменять кодировку на нужную?
send_answer(conn, typ="text/html; charset=utf-8", data=str("otver_cliente"))
return



s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 8080))#установка Ip(не задано) и порта приема сервера
s.listen(5)


try:
while 1:
conn, addr = s.accept()
print("New connection from " + addr[0])
try:
get_on(conn, addr)
except:
send_answer(conn, "500 Internal Server Error", data="Ошибка")
finally:
conn.close()
finally: s.close()
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
half-life
@half-life
Класс, супер. Всем 4 тебе 5. А теперь научись использовать тег code и оформи свой вопрос правильно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы