code: func (u *UTF8Reader) Read(p []byte) (n int, err error) {
  	n, err = u.Source.Read(p)
  
  	accepted := 0
  	s, c := u.state, u.codep
  	for i := 0; i < n; i++ {
  		c, s = decode(s, c, p[i])
  		if s == utf8Reject {
  			u.state = s
  			return accepted, ErrInvalidUTF8
  		}
  		if s == utf8Accept {
  			accepted = i + 1
  		}
  	}
  	u.state, u.codep = s, c
  	u.accepted = accepted
  
  	return
  }
docs: // Read implements io.Reader.