@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()
  • Вопрос задан
  • 376 просмотров
Пригласить эксперта
Ответы на вопрос 1
half-life
@half-life
Класс, супер. Всем 4 тебе 5. А теперь научись использовать тег code и оформи свой вопрос правильно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы