I ran some extra tests and the compiler is really picky regarding the use of /Zc:char8_t- and it won’t work unless it is specified as the next argument following /std:c++20.
At this point, I would recommend that you keep the divergence in VCToolchain.cs. I will discuss with the UBT owner about the possibility of adding an option at the TargetRules level but this is fairly niche so I’m not sure we will want to maintain such customization.
I’m afraid I don’t have a good answer regarding the vanilla version of Unreal. I would imagine that all of EA’s project do use the engine sources but I understand this can be problematic to make sure that all users of the plugin will mod the engine sources. I had a discussion with the owner of UBT yesterday and he is fine with adding an option that turn support for char8_t off through the TargetRules in a future release of the engine.
Based on my local experiment, the compiler is really picky regarding the 2 arguments and their placement on the command line. It does work fine when I hack VCToolChain.cs. Using the Additional Arguments fails as I’m assuming that the compiler is ignoring the 2nd instance of /std:c++20. The future TargetRules option will fix this.