Кодировка utf-8 не применяется

Есть файл

horoscop.py

import random

times = ["утром", "днём", "вечером", "ночью", "после обеда", "перед сном"]
advices = ["ожидайте", "предостерегайтесь", "будьте открыты для"]
promises = ["гостей из забытого прошлого", "встреч со старыми знакомыми",
            "неожиданного праздника", "приятных перемен"]


def generate_prophecies(total_num=5, num_sentences=3):
    prophecies = []

    i = 0
    while i < total_num:
        j = 0
        forecast = ""
        while j < num_sentences:
            t = random.choice(times)
            a = random.choice(advices)
            p = random.choice(promises)

            full_sentence = t.title() + " " + a + " " + p + "."
            if j != num_sentences - 1:
                full_sentence = full_sentence + " "

            forecast = forecast + full_sentence
            j = j + 1

        prophecies.append(forecast)
        i = i + 1

    return prophecies

И другой файл создающий страницу index.html

# coding: utf-8

from horoscope import generate_prophecies

from datetime import datetime as dt

def generate_page(head, body):

    page = "<html>" + head + body + "</html>"

    return page

def generate_head(title):

    head = "<meta charset='utf-8'>" + "<title>" + title + "</title>"

    return "<head>" + head + "</head>"

def generate_body(header, paragraphs):

    body = "<h1>" + header + "</h1>"

    i = 0

    while i < len(paragraphs):

        body = body + "<p>" + paragraphs[i] + "</p>"

        i += 1

    return "<body>" + body + "</body>"

def save_page(header, title, paragraphs, output="index.html"):

    fp = open(output, "w")

    today = dt.now().date

    page = generate_page(

        head=generate_head(title),

        body=generate_body(header=header, paragraphs=paragraphs)

    )

    print(page, file=fp)

    fp.close()

today = dt.now().date()

save_page(

    title="Гороскоп на сегодня",

    header="Что готовит для вас " + str(today) + "день",

    paragraphs=generate_prophecies(),

)

И собственно сама index.html
<html><head><meta charset='utf-8'><title>�������� �� �������</title></head><body><h1>��� ������� ��� ��� 2021-10-05����</h1><p>����� ���� ������ ������� ��� �������� �������. ����� �������� ������ �� �������� ��������. ������� ������ ������� ��� ������ �� ������� ���������.</p><p>����� ���� ������ ������� ��� �������� �������. ����� ����������������� �������� �������. ����� ����� ����������������� ������ �� �������� ��������.</p><p>����� �������� ������ �� ������� ���������. ���� ����������������� �������� �������. ����� ����� �������� ������������ ���������.</p><p>���� ����������������� ������ �� ������� ���������. ����� ������ ������� ��� ������ �� �������� ��������. ����� �������� ������ �� �������� ��������.</p><p>����� ����� �������� �������� �������. ����� �������� ������ �� �������� ��������. ����� �������� �������� �������.</p></body></html>

Почему кодировка utf-8 не применяется? Выводит на страницы эти знаки вопроса

может быть надо

open(output, "w", encoding='utf8')
1 симпатия

Спасибо! А я голову ломал))