Вы можете получить тот же результат, скопировав вставку colour
несколько раз в блокнот, а затем сохраните и перезагрузите файл. Нет ничего плохого в вашем коде на Python. Байты, записываемые в файл будут выглядеть следующим образом (в шестнадцатеричном):
63 CF 6C 6F 75 72 63 CF 6C 6F 75 72 ...
Когда блокнот читает эти байты, необходимые угадать, что они представляют. Он идеально декодировал бы текст как utf-8 или ascii. Вместо этого он видит шаблон в байтах и ошибочно полагает.
Я заметил, что каждая пара байтов соответствует одному китайскому символу. Это предполагает, что кодировка может быть utf-16. Следующий тест на питоне подтверждает, что это так:
>>> original = 'colour' * 100
>>> original.encode('utf-8').decode('utf-16')
\u6f63\u6f6c\u7275\... # repeating
Этих кодовые точки соответствуют 潣, 潬 и 牵 что то же самое, что блокнот дисплеи. Поэтому проблема заключается в том, что блокнот неправильно декодирует ваши байты как utf-16 вместо utf-8. Это напоминает старую ошибку Bush hid the facts.
Это работает для меня и может быть просто проблемой кодирования вашего текстового редактора. Вы пробовали просмотреть его в другой программе? Кроме того, было бы интересно, как выглядит чистый свалка ASCII. –