Товарищи, это писец какой-то. Хотели как лучше, а получилось еще более через жопу.
https://docs.python.org/3/library/functions.html#openmode is an optional string that specifies the mode in which the file is opened. <...> In text mode, if encoding is not specified the encoding used is platform dependent: locale.getpreferredencoding(False) is called to get the current locale encoding. (For reading and writing raw bytes use binary mode and leave encoding unspecified.)
1. Если не указан режим 'b', то по умолчанию файл считается текстовым. В двоичный файл можно писать только байты, в текстовый - только юникод.
(В текстовом режиме файл читается только до EOF ('\x1a'). Как совместить чтение до конца файла и запись юникода в файл? А никак.)
2.
Если кодировка не указана, по умолчанию берется locale.getpreferredencoding(False), т.е. результат выполнения будет зависеть от настроек оси! (для винды - от текущей локали).
Нахера??? От одних граблей избавились, другие приобрели.
В общем, всегда явно указывай явно кодировку файла.
with open('str_ru_text_1.txt', 'w', encoding='utf-8') as f: