12345678910111213141516171819202122232425262728 |
- 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
- }
|