Вы можете проверить гипотезу, что это возможно, но я верю, что вы можете только в конечном итоге знать, что это не с уверенностью. Другими словами, вы можете проверить буфер, чтобы убедиться, что все байтовые последовательности являются допустимыми UTF-8, что кодовые точки представлены наименьшим числом байтов, что отсутствуют 16-битные суррогатные коды и т. Д. Буфер, который отвечает всем этим критериям, может показаться текстовым, но вас могут обмануть.
В дополнение к обсуждению Рэймонда Чена в Old New Thing, цитируемому ответом Марка Пима, буфер мог фактически содержать машинный код x86, который, как оказалось, ограничен подмножеством, которое, похоже, является 7-битным печатаемым ASCII. Удивительно, но на самом деле вы можете писать значимые программы в этом подмножестве, одним из примеров которого является EICAR антивирусный тестовый вирус.
Конечно, буфер, который содержит последовательности байтов с искаженным UTF-8, вероятно, вообще не является текстом UTF-8. В этом случае у вас высокая степень доверия. Тогда уловка состоит в том, чтобы выяснить, какая кодировка может быть на самом деле.
Если вы знаете (или можете предположить) что-то о семантическом содержании буфера, то вы также можете использовать это для поддержки своего определения. Например, если предполагается, что в буфере содержится текст на английском языке, маловероятно, что в нем есть кодовые точки с корейского языка, и он должен быть написан правильно, следовать английской грамматике и т. Д. Конечно, это может дорого обойтись ...