Явно кодировку задать?
В Python3 - все по дефолту идет в utf-8. Т.е. любая строка - есть уже уникод. Но нужно смотреть внимательно на то что возвращают функции. Допустим если файл открывается по умолчанию то read возвращает строку, но если файл открыть как бинарный - то read будет возвращать байтовый массив. Та же внимательность нужна при работе с библиотеками (в той же subprocess, при обработке возвращаемых из подпроцессов данных).
В Python2.7 - разницы между байтовой последовательностью (массивом) и символьной строкой нет. Т.е. различать эти типы (массив байт и строка, которая тоже по сути массив байт но есть еще и кодировка этой строки, благодаря которой появляется возможность обрабатывать строку посимвольно) необходимо самостоятельно.
Так вот в 2.7 надо чаще пользоваться .encode() и .decode() и самому внимательно следить за кодировкой - тот же open открывает все файлы так что они читаются как байтовые последовательности и кодировку нужно явно прописать вызвав метод .decode().