‘peek-char’ in (ice-9 suspendable-ports) checks for the 'substitute port conversion strategy, but it doesn’t check for 'escape:
(if (eq? (port-conversion-strategy port) 'substitute) (values #\xFFFD buf (+ cur len)) (decoding-error "peek-char" port)) and: ((eq? (port-conversion-strategy port) 'substitute) (values #\xFFFD buf (+ cur prev-input-size))) This is in 3.0.8. Ludo’.