Python Kivy выдаёт ошибку UnicodeEncodeError
Я зaпускаю код на Kivy
from kivy.app import App
from kivy.uix.button import Button
class DuckyApp(App):
def build(self):
return Button(text="Hello")
if __name__ == "__main__":
DuckyApp().run()
И получаю такую ошибку
[INFO ] [Logger ] Record log in C:\Users\Natalia_Amir\.kivy\logs\kivy_20-10-18_74.txt
[INFO ] [Kivy ] v1.11.1
[INFO ] [Kivy ] Installed at "D:\Python\app\venv\lib\site-packages\kivy\__init__.py"
[INFO ] [Python ] v3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]
[INFO ] [Python ] Interpreter at "D:\Python\app\venv\Scripts\python.exe"
[INFO ] [Factory ] 184 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_gif (img_sdl2, img_pil, img_ffpyplayer ignored)
Traceback (most recent call last):
File "main.py", line 2, in <module>
from kivy.uix.button import Button
File "D:\Python\app\venv\lib\site-packages\kivy\uix\button.py", line 49, in <module>
from kivy.uix.label import Label
File "D:\Python\app\venv\lib\site-packages\kivy\uix\label.py", line 286, in <module>
from kivy.core.text import Label as CoreLabel, DEFAULT_FONT
File "D:\Python\app\venv\lib\site-packages\kivy\core\text\__init__.py", line 1006, in <module>
Text = Label = core_select_lib('text', label_libs)
File "D:\Python\app\venv\lib\site-packages\kivy\core\__init__.py", line 103, in core_select_lib
'identify potential causes\n{1}'.format(category.capitalize(), err))
File "C:\Users\Natalia_Amir\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py", line 1379, in critical
self._log(CRITICAL, msg, args, **kwargs)
File "C:\Users\Natalia_Amir\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py", line 1468, in _log
self.handle(record)
File "C:\Users\Natalia_Amir\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py", line 1478, in handle
self.callHandlers(record)
File "C:\Users\Natalia_Amir\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py", line 1540, in callHandlers
hdlr.handle(record)
File "C:\Users\Natalia_Amir\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py", line 854, in handle
self.emit(record)
File "D:\Python\app\venv\lib\site-packages\kivy\logger.py", line 247, in emit
self._write_message(message)
File "D:\Python\app\venv\lib\site-packages\kivy\logger.py", line 218, in _write_message
stream.write(fs % msg)
File "C:\Users\Natalia_Amir\AppData\Local\Programs\Python\Python37\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 250-251: character maps to <undefined>
Пожалуйста подскажите как это исправить?
Я использовал PyCharm
Ответы (2 шт):
Нужно пойти на официальный сайт kivy (kivy.org). Зайти в раздел download. А за тем установить все обновления и дополнительные библиотеки по инструкции.
Ошибка из-за того, что в логгере не была задана кодировка и использовалась системная, т.е. cp1252.
Сейчас, самая свежая устанавливаемая версия 1.11.1, это в логгере выглядит так:
FileHandler.fd = open(filename, 'w')
А с исправлением (в master, версия 2.0.0 уже есть исправление) так:
FileHandler.fd = open(filename, 'w', encoding=FileHandler.encoding)
, где FileHandler.encoding = 'utf-8'
Т.е. первый вариант -- руками пропатчить файл logger.py поменяв FileHandler.fd = open(filename, 'w'):
FileHandler.fd = open(filename, 'w', encoding='utf-8')
Второй вариант поставить версию из master ветки, где это уже исправлено, попробуйте:
pip install kivy==2.0.0rc4
После установки версия другая и в logger.py ошибка исправлена:
import kivy
print(kivy.__version__)
# 2.0.0rc4