Am Mittwoch, dem 13.04.2022 um 10:22 +0200 schrieb Maxime Devos: > [...] > Let's test this (in a new REPL with an UTF-8 locale): > > ((@ (ice-9 iconv) string->bytevector) "é" "ANSI_X3.4-1968") > ice-9/boot-9.scm:1669:16: In procedure raise-exception: > Throw to key `encoding-error' with args `("put-char" "conversion to > port encoding failed" 84 #<output: string 7fd5bbc23ee0> #\é)'. > > ((@ (ice-9 iconv) string->bytevector) "é" "ANSI_X3.4-1968" 'substitute) > $2 = #vu8(63) > ((@ (rnrs bytevectors) utf8->string) #vu8(63)) > $3 = "?" > > and the other direction: > > ((@ (ice-9 iconv) bytevector->string) #vu8(128) "ANSI_X3.4-1968" > 'substitute) > $5 = "�" ;; why #\� and not #\?? I don't know, I guess Guile is > inconsistent You are first encoding a non-ASCII byte to ASCII, which has no glyph for "I have no idea what this is", so a question mark (#\?) is used. When converting from invalid ASCII to UTF-8 on the other hand, you do have #\� as the WTF character, so that is used instead. This is entirely consistent :)
Cheers