Python 3.14.7: curses Textbox сохраняет символы 8-битной локали. Практическая проверка отделяет симптом от соседних причин: безопасный fixture, опровергающий control, измеримая развилка, стоп-линия и минимальный пакет для поддержки.
С чего начать проверку
Запрос ограничен формулировкой «как проверить ввод не-ASCII символов в curses.textpad.Textbox на Python 3.14.7». Наблюдаемый симптом: в terminal UI символ доступной 8-битной locale encoding вводится, но Textbox возвращает искажённый или обрезанный результат. Официально подтверждена более узкая граница: curses.textpad.Textbox теперь вводит и возвращает не-ASCII символы 8-битной локали вместо маскирования семью битами. Это не означает, что любой похожий crash, warning, hang или неверный результат вызван именно этой ошибкой. Сначала запишите точную версию Python, режим сборки, платформу и один ожидаемый переход состояния; обновление всей среды не должно быть первым действием.
Один безопасный test case
Для паспорта T21-09 выполните только такой опыт: в псевдотерминале с установленной однобайтной locale подать один кодируемый не-ASCII символ и Enter в Textbox, затем сохранить repr результата. Входы должны быть синтетическими, а рискованный код — жить в отдельном child process, контейнере, pty или temp root. До запуска задайте deadline, лимит памяти и допустимые файлы. Не используйте реальные архивы, токены, адреса, пользовательские документы или production PID. Если нужный backend, libc, compiler или GUI недоступен, зафиксируйте environment blocker: это честнее, чем имитировать результат.
Независимый control
Опровергающая ветка: ASCII-символ в той же locale и символ, который выбранная encoding представить не может. Наблюдения пишутся строго как «locale | curses encoding | входные bytes | getch sequence | результат repr | exit code». Сначала выполните control A, затем проблемный case B, полностью пересоздайте fixture и повторите A2. Если A2 расходится с A, опыт загрязнён cache, locale, descriptor, signal state или environment. Пустая ячейка не равна нулю, а текст exception не заменяет его класс. Такое разделение не позволяет объявить исправление только потому, что один запуск случайно не упал.
Чтение матрицы
Зелёная ветка разрешена только когда кодируемый не-ASCII символ возвращается без 7-bit искажения, ASCII control совпадает, а некодируемый input отклонён предсказуемо. Если оба варианта ведут себя одинаково плохо, чините fixture, а не Python. Если control чист, но симптом не воспроизводится, итог — not reproduced в конкретной конфигурации, не доказательство отсутствия дефекта вообще. Сравнение 3.14.6 и 3.14.7 допустимо лишь с одинаковым input и limits. Результат относится к issue-boundary, а не к скорости, безопасности или совместимости всего приложения.
Красные флаги
Стоп-линия: не менять terminal locale текущей сессии и прекратить опыт, если нет отдельного pty. Остановитесь также при записи вне temp root, внешнем сетевом запросе, появлении приватных данных, неконтролируемом descendant process или превышении deadline. Не получайте зелёный статус отключением проверок, catch-all обработчиком, бесконечным retry или повышением лимитов после сбоя. Возврат должен быть проверяемым: закрыть pty, восстановить terminal state через endwin и завершить test subprocess. После этого ещё раз снимите process/file inventory и убедитесь, что состояние совпало с baseline.
Воспроизводимый отчёт
Для issue #133031 достаточно передать: TERM, locale name, encoding, hex входа, repr результата, Python/curses versions и размер окна. Добавьте московский timestamp, labels A/B/A2 и точный критерий «{topic['green']}». Абсолютные пути, PIDs, hostnames, environment dumps, core dumps и содержимое рабочих файлов удалите или замените метками. Официальные источники подтверждают изменение «{topic['boundary']}», но не популярность запроса, позиции в поиске или готовность вашей системы. Такой пакет позволяет повторить один переход без доступа к инфраструктуре.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.
Источники и проверка
- Python 3.14.7 release проверено 2026-08-29
- Python 3.14.7 changelog проверено 2026-08-29
- CPython issue #133031 проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.