Welcome to the CHICKEN Scheme pasting service

encoding-aware string redux added by klovett on Tue Oct 6 20:54:27 2026

#59 $ cat ~/tmp/encoding.scm 
(import
  (except (scheme base) read-bytevector)
  (only (scheme process-context) command-line)
  (chicken base)
  (only (chicken io) read-bytevector)
  (only (chicken bytevector) utf8->string latin1->string))

(define encoder-name (string-append (cadr (command-line)) "->string"))
(define encoder (eval (string->symbol encoder-name)))

(print (string-length (encoder (read-bytevector))))

#60 $ printf "\xe2\x82\xa1" | use_chicken 6 csi -nq -s ~/tmp/encoding.scm latin1
3
#60 $ printf "\xe2\x82\xa1" | use_chicken 6 csi -nq -s ~/tmp/encoding.scm utf8
1
#60 $ printf "\xe2\x28\xa1" | use_chicken 6 csi -nq -s ~/tmp/encoding.scm latin1
3
#60 $ printf "\xe2\x28\xa1" | use_chicken 6 csi -nq -s ~/tmp/encoding.scm utf8

Error: (utf8->string) string contains invalid UTF-8 sequence: #u8(226 40 161)

	Call history:

	/Users/klovett/tmp/encoding.scm:9	  (##core#begin (##core#ensure-toplevel-definition encoder) (##core#set! encoder (eval (string->symbol ...
	/Users/klovett/tmp/encoding.scm:9	  (##core#ensure-toplevel-definition encoder)
	<syntax>	  (##core#undefined)
	/Users/klovett/tmp/encoding.scm:9	  (##core#set! encoder (eval (string->symbol encoder-name)))
	/Users/klovett/tmp/encoding.scm:9	  (eval (string->symbol encoder-name))
	/Users/klovett/tmp/encoding.scm:9	  (string->symbol encoder-name)
	/Users/klovett/tmp/encoding.scm:9	  (eval (string->symbol encoder-name))
	/Users/klovett/tmp/encoding.scm:9	  (string->symbol encoder-name)
	/Users/klovett/tmp/encoding.scm:11	  (print (string-length (encoder (read-bytevector))))
	/Users/klovett/tmp/encoding.scm:11	  (string-length (encoder (read-bytevector)))
	/Users/klovett/tmp/encoding.scm:11	  (encoder (read-bytevector))
	/Users/klovett/tmp/encoding.scm:11	  (read-bytevector)
	/Users/klovett/tmp/encoding.scm:11	  (print (string-length (encoder (read-bytevector))))
	/Users/klovett/tmp/encoding.scm:11	  (string-length (encoder (read-bytevector)))
	/Users/klovett/tmp/encoding.scm:11	  (encoder (read-bytevector))
	/Users/klovett/tmp/encoding.scm:11	  (read-bytevector)	<--

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
Name of the bot in #chicken: