你可以测试假设,但我相信你只能确切地知道它不是。换句话说,你可以检查缓冲区是否所有的字节序列都是合法的UTF-8编码,代码点是否用最少的字节表示,没有16位代理字符等等。通过所有这些标准的缓冲区可能看起来像文本,但你可能会被欺骗。除了Mark Pim回答中引用的Old New Thing上的Raymond Chen讨论外,缓冲区实际上可能包含x86机器代码,只是恰好限制在似乎是7位可打印ASCII子集中。令人惊讶的是,你实际上可以在该子集中编写有意义的程序,其中一个例子是EICAR防病毒测试病毒。当然,包含格式错误的UTF-8字节序列的缓冲区可能根本不是UTF-8文本。在这种情况下,你有很高的信心。然后需要的技巧是找出它可能实际上是什么编码。如果您了解(或可以假设)缓冲区的语义内容,那么您也可以利用它来支持您的确定。例如,如果缓冲区应该包含英文文本,则其中几乎不可能有韩文代码点,并且通常应正确拼写,遵循英语语法等。当然,这样的测试可能会很昂贵...
不能保证可靠性。请参考雷蒙德·陈在系列文章中的帖子。 问题在于没有BOM的UTF-8编码经常与同样有效的ANSI编码无法区分。我认为大多数解决方案(如win32 API IsTextUnicode)使用各种启发式方法来猜测文本格式的最佳答案。