The question asks for “the best” way to do it (making it opinion based) and forbids a potential solution without explaining why (it’s clearly some kind of assignment, but that doesn’t matter here). And it has plenty of answers both using Boost and in pure C++, so I’m not sure why that wasn’t enough for you. Just because it’s closed doesn’t mean the answers already provided are bad.
It doesn’t. As the poster two levels up said, all bytes that don’t represent an ASCII character have the high bit set, even the follow-up bytes in multibyte sequences. So the condition
b >= 32
will match and preserve them.