Как записать текст на русском в файл UTF-8?
Товарищи, это писец какой-то. Хотели как лучше, а получилось еще более через жопу.
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:
апд:
обсуждение
https://mail.python.org/pipermail/tutor/2012-July/...в кодировке Windows 1251
это ты откуда взял?cat str_*
stringstringstringстрокастрокастрока

file str_ru_text_1.txt 
str_ru_text_1.txt: UTF-8 Unicode text, with no line terminators

file str_ru_text_2.txt 
str_ru_text_2.txt: UTF-8 Unicode text, with no line terminators

file str_ru_bytes.txt
str_ru_bytes.txt: UTF-8 Unicode text, with no line terminators

file str_en_text_1.txt
str_en_text_1.txt: ASCII text, with no line terminators

file str_en_text_2.txt
str_en_text_2.txt: ASCII text, with no line terminators

file str_en_bytes.txt 
str_en_bytes.txt: ASCII text, with no line terminators