Проблема с wofstream заключается в том, что он принимает широкую строку для метода open (), но фактически не записывает широкие символы в файл.Вы должны быть откровенны в этом и использовать ibue () в локали, в которой есть codecvt с нужной вам кодировкой.Реализация такого codecvt, который производит кодировку UTF, все еще не совсем точная, вот пример , использующий Boost.