1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-29 08:20:20 +02:00

fix string->bytevector for utf-8 and non-error conversion strategies

* module/ice-9/iconv.scm (call-with-encoded-output-string):
  (string->bytevector, bytevector->string): Only call string->utf8 and
  utf8->string if the conversion strategy is `error'.
This commit is contained in:
Andy Wingo 2013-01-15 15:08:20 +01:00
parent 686df5162d
commit e5cef86e9c

View file

@ -47,7 +47,8 @@
(conversion-strategy 'error)) (conversion-strategy 'error))
"Call PROC on a fresh port. Encode the resulting string as a "Call PROC on a fresh port. Encode the resulting string as a
bytevector according to ENCODING, and return the bytevector." bytevector according to ENCODING, and return the bytevector."
(if (string-ci=? encoding "utf-8") (if (and (string-ci=? encoding "utf-8")
(eq? conversion-strategy 'error))
;; I don't know why, but this appears to be faster; at least for ;; I don't know why, but this appears to be faster; at least for
;; serving examples/debug-sxml.scm (1464 reqs/s versus 850 ;; serving examples/debug-sxml.scm (1464 reqs/s versus 850
;; reqs/s). ;; reqs/s).
@ -66,7 +67,8 @@ bytevector according to ENCODING, and return the bytevector."
#:optional (conversion-strategy 'error)) #:optional (conversion-strategy 'error))
"Encode STRING according to ENCODING, which should be a string naming "Encode STRING according to ENCODING, which should be a string naming
a character encoding, like \"utf-8\"." a character encoding, like \"utf-8\"."
(if (string-ci=? encoding "utf-8") (if (and (string-ci=? encoding "utf-8")
(eq? conversion-strategy 'error))
(string->utf8 str) (string->utf8 str)
(call-with-encoded-output-string (call-with-encoded-output-string
encoding encoding
@ -79,7 +81,8 @@ a character encoding, like \"utf-8\"."
"Decode the string represented by BV. The bytes in the bytevector "Decode the string represented by BV. The bytes in the bytevector
will be interpreted according to ENCODING, which should be a string will be interpreted according to ENCODING, which should be a string
naming a character encoding, like \"utf-8\"." naming a character encoding, like \"utf-8\"."
(if (string-ci=? encoding "utf-8") (if (and (string-ci=? encoding "utf-8")
(eq? conversion-strategy 'error))
(utf8->string bv) (utf8->string bv)
(let ((p (open-bytevector-input-port bv))) (let ((p (open-bytevector-input-port bv)))
(set-port-encoding! p encoding) (set-port-encoding! p encoding)