Стандарт не определяет кодировку для узких или широких строк. Поставщик обычно стремится к чему-то, что не удивительно на целевой машине, но трудно сказать больше, чем это. Это означает, например, что узкая строка, вероятно, будет использовать ASCII (или, действительно, что-то вроде ISO-8859) на большинстве персональных компьютеров, но EBCDIC на мэйнфрейме IBM.
Строки широких символов также различаются - например, большинство компиляторов в Windows будут использовать UTF-16. В Linux UTF-32 / UCS-4, вероятно, более распространен.
Упоминание MessageBox
предполагает Windows, где (как вы и предполагали) у вас обычно будет UTF-16 для широких струн. В этом случае, если вы явно указываете широкие строки, вы также хотите явно указать широкую версию функции - MessageBoxW
.
Что касается создания строкового литерала UTF-8, все, что я могу сказать, это "удача". Это может сделать Visual Studio, но если есть способ заставить это сделать, я не знаю об этом.