Исправление ошибок bytes и str в Ren’Py 8
В Python 3 текст и байты больше не взаимозаменяемы. R-Migrator автоматически патчит строковую логику по всему проекту.
В Ren’Py 7 и Python 2 тип str мог одновременно хранить и текст, и сырые байты. В Ren’Py 8 на Python 3 тип str — это строго текст в Юникоде, а bytes — неизменяемые байты. Как только старый мод пытается прочитать файл, сгенерировать хэш или сложить строку с байтовым буфером, игра моментально падает с фатальным TypeError. R-Migrator автоматически находит эти места и внедряет совместимый код во все .rpy скрипты.
Почему возникает ошибка bytes / str на Ren’Py 8
Python 3 запрещает неявные преобразования между текстовыми и бинарными данными:
- TypeError: can’t concat str to bytes — Возникает при попытке конкатенации строки текста и байтового потока (например, при чтении ресурсов без декодирования).
- TypeError: a bytes-like object is required, not str — Типично для сериализации сохранений, работы с сетью и шифрованием.
- TypeError: cannot use a string pattern on a bytes-like object — Регулярные выражения, скомпилированные для строк, применяются к байтовым данным.
- NameError: name unicode is not defined — В Python 3 встроенная функция unicode() удалена — вместо неё используется str.
Как R-Migrator исправляет ошибки строк
Вместо ручного добавления .encode() и .decode() в десятках скриптов:
- Анализ строковых вызововСканирует .rpy файлы на наличие устаревших функций чтения файлов и работы со строками.
- Внедрение слоя совместимостиДобавляет корректное декодирование в UTF-8, заменяет unicode() на str и исправляет методы словарей.
- Патчинг мини-игр и поэтических скриптовСпециально адаптирован под структуры данных модов DDLC и мини-игр.
- Сохранение оригиналовПеред записью каждого файла создаётся резервная копия .bak.
Частые вопросы по ошибкам bytes и str
В Python 3 строки (str) и бинарные данные (bytes) — абсолютно разные типы. В Python 2 движок разрешал складывать их неявно. Ren'Py 8 требует явного разделения, иначе игра аварийно завершается.
Да, расставляя вызовы .decode('utf-8') и .encode('utf-8'). Но в больших проектах таких мест могут быть сотни, и один пропущенный вызов сломает прохождение в середине игры. R-Migrator делает это пакетно и надёжно.
Да, алгоритм R-Migrator учитывает особенности словарей слов и подсчёта очков в модах Doki Doki Literature Club.
Избавьтесь от ошибок типов и кодировок за один клик. R-Migrator полностью берет на себя адаптацию строк под Python 3.