Почему вместо русского языка кракозябры?

Только учусь делать сайт с помощью python. И решил сделать страницу с русским языком, но вышли кракозябры:

введите сюда описание изображения

Понимаю что проблема с кодировкой(скорее всего), вот только не пойму где и как исправить...

Код:

#!/Python380/python 
print("Content-type: text / html")
print(
"""
<html lang="ru">
    <head>
        <meta charset="utf-8">
        <title>Проба с Python</title>
    </head>
    <body>
        <h1><b>Привет</b></h1>
    </body>
</html>
"""
)

Кодировка файла python:

введите сюда описание изображения


Ответы (2 шт):

Автор решения: cauf

Как выяснилось в комментариях, автор вопроса использует Windows 10 для запуска кода. Так как канал stdout у Windows работает на кодировке cp866 (cp1251 - если была перенастроена кодовая страница), передавая текст страницы через print, вы приводите его к системной кодировке. Именно из-за несоответствия содержимого тега meta и кодировки, в которой код страницы попадает на сервер, вы и получаете кракозябры.

Как один из вариантов решения данной проблемы, могу посоветовать записывать код страницы в какой-то файл на диске с указанием целевой кодировки. Делается это при открытии файла, например так:

raw_html = """
<html lang="ru">
    <head>
        <meta charset="utf-8">
        <title>Проба с Python</title>
    </head>
    <body>
        <h1><b>Привет</b></h1>
    </body>
</html>
"""

with open('path\to\file.html', mode='w', encoding='utf-8') as page_file:
    page_file.write(raw_html)

→ Ссылка
Автор решения: DGDays

На Хабре дали такой ответ:

import sys
import codecs

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

После него всё стало работать?

→ Ссылка