String(const char*) is implemented by interpreting the given bytes as ASCII.
For String you can add the necessary boilerplate if you need non-ASCII characters, but in other situations you can’t. Eg. most of the
StringArray constructors are ASCII only due to this.
Would it make sense to have this constructor interpret data as UTF-8 instead? That should not break any existing code. And you can still pretty reliably detect invalid data.