Решён
Вместо кода выходят символы - что делать?

Биохакер_в_поиске Python
2.9k
4

Пишу скрипт на Python, при запуске в терминале вместо нормального вывода получаю мусор:

╨Я╤А╨╕╨▓╨╡╤В ╨╝╨╕╤А

При этом сам файл скрипта открывается нормально в VS Code. Система Windows 11, Python 3.11.

Что делать? Уже час сижу, перепробовал несколько кодировок в print().

UPDATE: Помог вариант с chcp 65001. Поставил переменную окружения PYTHONUTF8=1 чтобы не вводить каждый раз. Спасибо всем!
Решение
63
Участник • 1 ответ

Проблема в том, что cmd.exe на Windows по умолчанию использует кодовую страницу 866 (или 1251 в зависимости от настроек системы), а Python пишет в stdout в UTF-8. Отсюда каша.

Есть несколько способов починить раз и навсегда:

1. Переменная окружения (рекомендую)

Добавь в системные переменные среды:

PYTHONUTF8=1

Или прямо в начале скрипта:

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

2. Через манифест

В Python 3.7+ можно указать кодировку явно в open() и при работе с файлами, но для stdout проще первый способ.

3. Windows Terminal вместо cmd

Скачай Windows Terminal из Microsoft Store - там UTF-8 по умолчанию, никаких плясок с кодировками.

Аватар Биохакер_в_поиске

PYTHONUTF8=1 сработало, наконец-то. Спасибо, уже голову сломал.

35
Участник • 1 ответ

В терминале перед запуском скрипта выполни:

chcp 65001

Это переключит кодовую страницу Windows на UTF-8. Либо просто запускай через PowerShell, а не cmd - там с этим получше.

20
Эксперт • 2 ответа

Это классика Windows. Каждый раз когда сажусь на чужой комп и вижу cmd - знаю что будет эта история. Microsoft 30 лет не могут нормально в Unicode.

2
Участник • 1 ответ

у меня была такая же фигня, попробуй в начале скрипта написать

# -*- coding: utf-8 -*-

не уверен что это именно твой случай но мне помогло как то...

Аватар Рустам

Это объявление кодировки файла, а не терминала. Для Python 3 оно вообще не нужно - utf-8 и так дефолт. Проблема у человека в другом месте.

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.