Hello, Attached is a patch that allows `utf8->string' to take additional parameters indicating the start and end indicies of the bytevector that it is converting. This preserves backwards compatibility by adding the new functionality to an `scm_utf8_to_string_range' function (open to any alternative name suggestions) and letting the old `scm_utf8_to_string' function call it. For my work, I am currently handling bytevectors with large strings embedded as part of the bytevector. This patch would reduce the need for spurious allocations and copying to convert part of a bytevector to a string using pure Scheme. It would also make R7RS compatibility easier, since the current compatibility module involves copies to a fresh bytevector. For example, from module/scheme/base.scm > (define (%subbytevector bv start end) > (define mlen (- end start)) > (define out (make-bytevector mlen)) > (bytevector-copy! bv start out 0 mlen) > out) > > (define (%subbytevector1 bv start) > (%subbytevector bv start (bytevector-length bv))) > > (define r7:utf8->string > (case-lambda* > ((bv) (utf8->string bv)) > ((bv start #:optional (end (bytevector-length bv))) > (utf8->string (%subbytevector bv start end))))) Would appreciate any thoughts and feedback. ~ Vijay