Ren’Py 8 · Строки и кодировки

Исправление ошибок bytes и str в Ren’Py 8

В Python 3 текст и байты больше не взаимозаменяемы. R-Migrator автоматически патчит строковую логику по всему проекту.

💾
Резервные копии .bak Оригиналы никогда не теряются
⚡
Ядро на Cython До 50% быстрее пакетная обработка
📦
14 МБ Portable Без установки Python и библиотек
🐧
Windows и Linux Нативные сборки под обе ОС

В 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() в десятках скриптов:

  1. Анализ строковых вызововСканирует .rpy файлы на наличие устаревших функций чтения файлов и работы со строками.
  2. Внедрение слоя совместимостиДобавляет корректное декодирование в UTF-8, заменяет unicode() на str и исправляет методы словарей.
  3. Патчинг мини-игр и поэтических скриптовСпециально адаптирован под структуры данных модов DDLC и мини-игр.
  4. Сохранение оригиналовПеред записью каждого файла создаётся резервная копия .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.