Короткий ответ: не страдай %ерней и НИКОГДА не давай файлам имена в чем-то кроме ASCII. Делай транслит при необходимости.
Длинный ответ:
Концептуальная проблема в том, что по URL невозможно определить какую кодировку надо использовать. Попробуйте сделать rawurlencode русской строке в 1251 и в UTF8. При этой операции теряется информация о кодировки исходной строки. Браузеры при навигации выкручиваются тем, что имеют кодировку страницы. Но если набирать русские буквы в URL руками, то начинается кто в лес кто по дрова, потому что догадаться в какой кодировке сервер ожидает URL невозможно. Ну и серверу гадать что же за кодировку он получил и как ее преобразовывать напряжно, так как определить кодировку со 100%-й достоверностью, особенно на коротких строках в общем случае нельзя, а более ли менее надежные методы весьма требовательны к ресурсам.