Почему произвольные? Это кои8... Ну, смотрите, вот принесли мне диск типа "добавь в файлопомойку", а там все имена файлов в кои8. Я должен сказать "идите нафиг, у вас произвольные байты в именах"? Нет. В принципе нет никакого ограничения в ФС на байты в именах файлов. Ну, кроме /. В принципе, можно случайными байтами закидывать любыми. Я не вижу в этом извращении чего-то плохого. ФС позволяет же.
Ну и, например, тяжёлое наследин -- самба. Там когда-то давно маньяк линуксоид сделал чарсет кои8 локальный. В итогу все работают в уникоде, а по самбе в кои8.
Я к тому, что держать имена в нескольких кодировках - фуфу, но это случается и вот я сегодня как раз избавлялся от такого наследия. Там ещё 1251 лежит и 866 даже. :D Привёл всё в уникод.
Удивительный секс с bytes([ord(c) - 0xdc00 if ord(c) > 256 else ord(c) for c in s]).decode('koi8-r') меня привёл в восторг! Почему питон не может отдать кои8 нормально? Зачем такое извращение? Почему он сам это делает кривой уникод и потом сам его не понимает? Бггг
Потому что читает имя файла с диска в текущей кодировке, которая видимо utf-8. Хорошо хоть информацию не теряет. И я не уверен что это сам питон так делает. С большой вероятностью это libc/ядро.
> path may be a path-like object. If path is of type bytes (directly or indirectly through the PathLike interface), the filenames returned will also be of type bytes; in all other circumstances, they will be of type str.