anchor.diff:                                       ((<= #xc0 c #xdf) (values 1 (logand #x1f c)))
                                        ((<= #xe0 c #xef) (values 2 (logand #x0f c)))
                                        ((<= #xf0 c #xf7) (values 3 (logand #x07 c)))
  -                                     ((<= #xf8 c #xfd) (ecommit c) (values 0 0)) ;; error exceed 21bit
  -                                     ((<= #xfe c #xff) (values 0 0)))) ;; ignore bom
  +                                     ((<= #xf8 c #xff) (ecommit c) (values 0 0)))) ;; error exceed 21bit
                             (cond ((or (<= #x00 c #x7f)  ;;error input
                                        (<= #xc0 c #xff))
                                    #2=(loop :with result ;;revert partial read.
  
positive.code:                                           :finally (ecommit (+ (logand (ash #x3f (- count))
                                                                         state)
                                                                 (logxor #xff (ash #x7f (- count)))))
                                                     (mapc (lambda (c) (ecommit c)) result))
                                   (setf state 0 count 0 read 0)
                                   #1#)
                                  ((<= #x80 c #xbf)
  
negative.code:   (<=  #xe000 c #xe0ff))
  
  (defmethod encoding-read ((encoding utf-8) input output-char)
    (let (cr not-first-byte)
      (labels ((commit (c)
                 (setf cr (funcall output-char c cr encoding)))
               (ecommit (c)
  