That is how I would do it. It would be a non-breaking change for anyone using only ANSI (128 chars) anyway.
Is there really such a big workload for this? If all char* and std::string parameters are assumed to be UTF-8 encoded byte arrays then they are simply passed through the code unchanged until
a) they are sorted/displayed
b) they need to be specifically converted for some function calls (e.g. UTF-16 for the Windows API)