Ошибка UnicodeEncodeError: 'locale' codec can't encode character

import pyttsx3
import time
import random
import os.path
from requests_html import HTMLSession
com = "введите команду", "дайте указание", "что вы хотели?"
virus = "статистика коронавируса", "информачия об коронавирусе", "количество зараженных"
data =  "скажи дату", "какая дата", "дата"
_time_ = 'скажи время', 'который час', 'сколько время'
speak = pyttsx3.init()
ass = os.path.isfile("text.txt")
session = HTMLSession()

if ass == True:
    f = open("text.txt", 'r')
    nn = f.read()
    f.close()
    print("привет", nn)
    speak.say("привет" + nn)
    speak.runAndWait()
    _com_ = random.choice(com)
    print(_com_)
    speak.say(_com_)
    speak.runAndWait()
    comm = input(":")
    while True:
        if comm in virus:
            rs = session.get('https://coronavirus-monitor.ru/statistika/')
            rs.html.render()  # Без этого не будет выполнения js кода

            for row in rs.html.find('#statistics .total-table-row'):
                name = row.find('.name', first=True).text.rstrip(':')
                value = row.find('.value', first=True).text
                print(name, value)
                engine.say(name)
                engine.say(value)
                engine.runAndWait()
                break
        elif comm in data:
            a = time.strftime("сегодня %B %d, %Y.", time.localtime())
            print(a)
            speak.say(str(a))
            speak.setProperty('rate', 125)
            speak.runAndWait()
            break
        elif comm in _time_:
            yyy = time.strftime("сейчас %X.", time.localtime())
            print(yyy)
            speak.say(str(yyy))
            speak.runAndWait()
            break
elif ass == False:
    speak.say("привет,мой друг,я не знаю твоего имен,не мог бы ты написать его?")
    speak.runAndWait()
    _name_ = input(":")
    f = open("text.txt", 'w')
    f.write(_name_)
    f.close()
    time.sleep(2)
    print("привет", _name_)
    speak.say("привет" + _name_)
    speak.runAndWait()
input()

yyy = time.strftime("сейчас %X.", time.localtime()) UnicodeEncodeError: 'locale' codec can't encode character '\u0441' in position 0: Illegal byte sequence


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

Автор решения: Artem Ermakov

Не следует передавать методу strftime не-ASCII символы. В некоторых случаях это будет работать, в некоторых - нет, зависит от окружения.

Вместо

a = time.strftime("сегодня %B %d, %Y.", time.localtime())

следует писать

a = "сегодня {t}".format(t=time.strftime("%B %d, %Y.", time.localtime()))
→ Ссылка