Просто $request:charset не имеет отношения к Accept-Charset/Accept.
Перекодировку, кстати, можно реализовать с помошью того же прасера, причем - достаточно легко: анализируем один или несколько параметров (порт, Accept-Charset, User-Agent, расширение и т.д.) и выставляем $response:charset.