38 const unsigned char byte1 =
data[0];
44 }
else if (
len >= 2 && byte1 >= 0xC2 && byte1 <= 0xDF &&
45 (
signed char)
data[1] <= (
signed char)0xBF) {
47 }
else if (
len >= 3) {
48 const unsigned char byte2 =
data[1];
51 const int byte2_ok = (
signed char)byte2 <= (
signed char)0xBF;
52 const int byte3_ok = (
signed char)
data[2] <= (
signed char)0xBF;
54 if (byte2_ok && byte3_ok &&
56 ((byte1 == 0xE0 && byte2 >= 0xA0) ||
58 (byte1 >= 0xE1 && byte1 <= 0xEC) ||
60 (byte1 == 0xED && byte2 <= 0x9F) ||
62 (byte1 >= 0xEE && byte1 <= 0xEF))) {
64 }
else if (
len >= 4) {
66 const int byte4_ok = (
signed char)
data[3] <= (
signed char)0xBF;
68 if (byte2_ok && byte3_ok && byte4_ok &&
70 ((byte1 == 0xF0 && byte2 >= 0x90) ||
72 (byte1 >= 0xF1 && byte1 <= 0xF3) ||
74 (byte1 == 0xF4 && byte2 <= 0x8F))) {