anchor.diff:    "Allocate a foreign string containing Lisp string STRING.
   The string must be freed with FOREIGN-STRING-FREE."
     (check-type string string)
  -  (with-checked-simple-vector ((string string) (start start) (end end))
  +  (with-checked-simple-vector ((string (coerce string 'babel:unicode-string))
  +                               (start start) (end end))
       (declare (type simple-string string))
       (let* ((mapping (lookup-mapping *foreign-string-mappings* encoding))
              (count (funcall (octet-counter mapping) string start end 0))
  
positive.code:     (2 (%foreign-string-length pointer offset :uint16 2))
      (4 (%foreign-string-length pointer offset :uint32 4))))
  
  ;;; what to do with COUNT here? ahrg... make it default to STRLEN? but
  ;;; what about the "at most" part?
  (defun foreign-string-to-lisp (pointer &key (offset 0) count max-chars
                                 (encoding *default-foreign-encoding*))
    "Copy at most COUNT bytes from POINTER plus OFFSET encoded in
  
negative.code: 
  (define-foreign-type foreign-string-type ()
    (;; CFFI encoding of this string.
     (encoding :initform nil :initarg :encoding :reader encoding)
     ;; Should we free after translating from foreign?
     (free-from-foreign :initarg :free-from-foreign
                        :reader fst-free-from-foreign-p
                        :initform nil :type boolean)
     ;; Should we free after translating to foreign?
     (free-to-foreign :initarg :free-to-foreign
                      :reader fst-free-to-foreign-p
                      :initform t :type boolean))
    (:actual-type :pointer)
    (:simple-parser :string))
  
  ;;; describe me
  (defun fst-encoding (type)
    (or (encoding type) *default-foreign-encoding*))
  
  ;;; Display the encoding when printing a FOREIGN-STRING-TYPE instance.
  (defmethod print-object ((type foreign-string-type) stream)
  