public static bool IsValidUtf8(byte[] data)
{
int i = 0;
while (i < data.Length)
{
int byteCount = 0;
// 检查第一个字节
if ((data[i] & 0x80) == 0) // 0xxxxxxx
{
byteCount = 1;
}
else if ((data[i] & 0xE0) == 0xC0) // 110xxxxx
{
byteCount = 2;
}
else if ((data[i] & 0xF0) == 0xE0) // 1110xxxx
{
byteCount = 3;
}
else if ((data[i] & 0xF8) == 0xF0) // 11110xxx
{
byteCount = 4;
}
else
{
return false; // 不是有效的UTF-8起始字节
}
// 检查后续字节
for (int j = 1; j < byteCount; j++)
{
if ((data[i + j] & 0xC0) != 0x80) // 不是10xxxxxx
{
return false;
}
}
i += byteCount;
}
return true;
}本文来自 www.luofenming.com