func validUtf8(data []int) bool { n, cnt := len(data), 0 for i, m := 0, 0; i < n; i++ { if cnt != 0 { if data[i]>>6 != 2 { return false } cnt-- continue } // b10000000 = 0x80 for m = 0x80; m&data[i] != 0; m >>= 1 { } switch m { case 0x80: // 0xxxxxxx case 0x20: // 110xxxxx cnt = 1 case 0x10: // 1110xxxx cnt = 2 case 0x08: // 11110xxx cnt = 3 default: return false } } return cnt == 0 }