Нет, они не закодированы во внутреннем строковом представлении Pythons, такого нет. Они кодируются в кодировке операционной системы / файловой системы. Переход на Unicode работает для os.walk, хотя.
Я не знаю, как ведет себя os.walk, когда имена файлов не могут быть декодированы, но я предполагаю, что вы получите строку обратно, как с os.listdir (). В этом случае у вас снова будут проблемы позже. Кроме того, не вся стандартная библиотека Python 2.x будет правильно принимать параметры Юникода, поэтому вам может понадобиться закодировать их как строки в любом случае. Таким образом, проблема на самом деле может быть где-то еще, но вы заметите, если это так. ; -)
Если вам нужен больший контроль над декодированием, вы не всегда можете передать строку, а затем просто декодировать ее
filename = filename.decode ()
как обычно.