Это пытается быть четырехбайтовым символом UTF8, но он не сопоставляется ни с какой допустимой кодировкой UTF8.
В UTF8, если первый полубайт равен F
( или 1111
в двоичном формате), тогда это всегда четырехбайтовый символ UTF8.
Это из https://en.wikipedia.org/wiki/UTF-8, в котором более подробно объясняется UTF8:
Показанные вами байты, F2 B8 80 A0 выглядят так, как будто они могут быть действительными с учетом этого шаблона.
11110010 10111000 10000000 10100000
Но не все байты, начинающиеся с F
сопоставить с действительными кодировками UTF8. Например, между F0B18D8A
и F3A08081
большой разрыв. Возможно, когда-нибудь в будущей версии UTF8 будут использоваться кодировки, в которых первый байт - F1
или F2
, но в настоящее время этот диапазон не используется.
http://www.fileformat.info/info/charset/UTF-8/list.htm?start=126275 показывает пробел между последним символом CJK и первым из серии символов тега:
Таким образом, байты, вызвавшие ошибку, не являются действительной кодировкой UTF8 .
Аналогичным образом, если вы введете свою строку шестнадцатеричных байтов в любой декодер UTF8, он не распознает ее как действительную кодировку.
http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=F2B880A0&mode=bytes возвращает это :
Я думаю, что наиболее вероятное объяснение состоит в том, что источник ваших входных данных вообще не кодирует их в UTF8. Это может быть другая кодировка символов или двоичные данные, которых нет в текстовой кодировке.