No you don't - you store std::wstring in the keyboard map, not wchar's.  You then only ever use them to convert back to utf8.