UnicodeEncodeError: кодек "latin-1" не может кодировать символ при запуске программы exe

Я пытаюсь запустить существующую программу на компьютере, находясь за границей. Когда я нажимаю, чтобы запустить программу.exe, она сообщает, что видит файл журнала. При просмотре файла журнала он говорит:

Traceback (последний вызов был последним):
Файл "itchycats.py", строка 1249, в модуле
Файл "itchycats.py", строка 808, в основном
Файл "itchycats.py", строка 326, в GetProfileInfo
Файл "sabnzbd\misc.pyo", строка 281, в папке get_user_shellfolders
UnicodeEncodeError: кодек "latin-1" не может кодировать символы в позиции 40-41: порядковый номер не в диапазоне (256)

Я продолжаю искать эту UnicodeEncodeError: 'latin-1', могу ли я редактировать программный код, даже если я его не создавал. У меня нет python или любого другого программного обеспечения, которое я читал в темах, обсуждающих "unicodeencodeerror". Есть ли что-то, что я могу запустить, чтобы заставить мой компьютер запустить эту программу. У меня никогда не было проблем на других компьютерах, но это заимствованный ноутбук на Тайване. Windows не является многоязычной версией, поэтому я не могу изменить ее на английский (вот почему я думаю, что получаю эту ошибку). Помимо того, что я провожу неделю в Азии, изучая, как стать программистом, есть ли какие-нибудь советы по правильному запуску этого программного обеспечения?

1 ответ

sabnzbd не будет работать правильно на любом компьютере с символами в пути к папке оболочки, которых нет в ISO 8859-1.

Ошибка происходит в misc.py:

name, value, val_type = _winreg.EnumValue(key, i)
values[name] = value.encode('latin-1')

Это немного глупо. Кодировка ("кодовая страница"), которую Windows будет использовать для имен файлов байтовых строк, представляет собой "кодовую страницу ANSI", которая будет похожа только на ISO 8859-1 ("latin-1") на западноевропейских машинах, и даже тогда не совсем то же самое.

Правильная кодировка будет 'mbcs', который копирует эту кодовую страницу независимо от того, на что она установлена. Однако это все равно не сработает, если у вас есть случайные папки с символами, которые не помещаются в кодовую страницу ANSI.

Правильный ответ - оставить строку Unicode в покое, ни в коем случае не кодировать ее в байты. Python для Windows прекрасно поддерживает встроенные имена файлов в Юникоде (что является отличной возможностью; это один из очень немногих кроссплатформенных языков для этого). Убедите разработчиков sabnzbd удалить этот код и просто использовать строки Unicode.

Другие вопросы по тегам