0xxxxxxx 0 - 127 110yyyyx 10xxxxxx 128 - 2047 1110yyyy 10yxxxxx 10xxxxxx 2048 - 65535 11110yyy 10yyxxxx 10xxxxxx 10xxxxxx 65536 - 0x10FFFF bool ConvChU32ToU8(const char32_t u32Ch, std::array<char, 4>& u8Ch) { if (u32Ch < 0 || u32Ch > 0x10FFFF) { return false; } if (u32Ch < 128) { u8Ch[0] = char(u32Ch); u8Ch[1] = 0; u8Ch[2] = 0; u8Ch[3] = 0; } else if (u32Ch < 2048) { u8Ch[0] = 0xC0 | char(u32Ch >>