UTF-8 - это не набор символов, это кодировка символов Unicode. И, поскольку это не связано с программированием, я подталкиваю его к суперпользователю.
Если вы делаете хотите написать программу для обнаружения этих последовательностей, это довольно просто:
Illegal UTF-8 initial sequences
UTF-8 Sequence Reason for Illegality
10xxxxxx illegal as initial byte of character (80..BF)
1100000x illegal, overlong (C0 80..BF)
11100000 100xxxxx illegal, overlong (E0 80..9F)
11110000 1000xxxx illegal, overlong (F0 80..8F)
11111000 10000xxx illegal, overlong (F8 80..87)
11111100 100000xx illegal, overlong (FC 80..83)
1111111x illegal; prohibited by spec
Затем, при условии, что первый октет является допустимым, просто помните, что количество октетов, образующих кодовую точку, может быть получено путем подсчета количества 1
битов перед первым 0
битом.
Например, 11110xxx
- это начало последовательности из 4 октетов, поэтому вы должны пропустить 4 октета после того, как вы установили его законность.
Другое, что нужно сделать, это убедиться, что все октеты продолжения начинаются с 10
.