[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#20200: GUILE 2.0.11: open-bytevector-input-port fails to open in bin
From: |
Mark H Weaver |
Subject: |
bug#20200: GUILE 2.0.11: open-bytevector-input-port fails to open in binary mode |
Date: |
Thu, 26 Mar 2015 18:57:53 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) |
David Kastrup <address@hidden> writes:
> Run the following code in an UTF-8 capable locale:
>
> (setlocale LC_ALL "")
> (use-modules (rnrs io ports) (rnrs bytevectors) (ice-9 format))
> (let ((p (open-bytevector-input-port
> (u8-list->bytevector '(#xc3 #x9f #xc3 #X9f)))))
> (format #t "~a ~a\n" (port-encoding p) (binary-port? p))
> (format #t "#x~x\n" (char->integer (read-char p)))
> (format #t "~a ~a\n" (port-encoding p) (binary-port? p))
> (set-port-encoding! p "ISO-8859-1")
> (format #t "~a ~a\n" (port-encoding p) (binary-port? p))
> (format #t "#x~x\n" (char->integer (read-char p)))
> (format #t "~a ~a\n" (port-encoding p) (binary-port? p)))
>
> This results in the output
> #f #t
> #xdf
> #f #t
> ISO-8859-1 #f
> #xc3
> ISO-8859-1 #f
>
> The manual, however, states:
>
> -- Scheme Procedure: port-encoding port
> -- C Function: scm_port_encoding (port)
> Returns, as a string, the character encoding that PORT uses to
> interpret its input and output. The value â#fâ is equivalent to
> â"ISO-8859-1"â.
>
> That would appear to be false since the value #f here is treated as
> equivalent to "UTF-8" rather than "ISO-8859-1".
This is indeed a bug, introduced in Guile 2.0.9. The workaround is to
explicitly set the encoding to "ISO-8859-1".
Mark