diff options
author | Andy Wingo <wingo@pobox.com> | 2013-01-15 15:08:20 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-01-15 16:41:20 +0100 |
commit | e211d69d9dcb057d3c49c1d94c02894ddd19a215 (patch) | |
tree | fbe1529a235ed6af9d9d3bc1f75c3d8bba72522b | |
parent | 581f410fbd803721eb750ed8e7d6ec4cc4bcda79 (diff) | |
download | guile-e211d69d9dcb057d3c49c1d94c02894ddd19a215.tar.gz |
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'.
-rw-r--r-- | module/ice-9/iconv.scm | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/module/ice-9/iconv.scm b/module/ice-9/iconv.scm index a8b745896..88af90d5a 100644 --- a/module/ice-9/iconv.scm +++ b/module/ice-9/iconv.scm @@ -47,7 +47,8 @@ (conversion-strategy 'error)) "Call PROC on a fresh port. Encode the resulting string as a 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 ;; serving examples/debug-sxml.scm (1464 reqs/s versus 850 ;; reqs/s). @@ -66,7 +67,8 @@ bytevector according to ENCODING, and return the bytevector." #:optional (conversion-strategy 'error)) "Encode STRING according to ENCODING, which should be a string naming 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) (call-with-encoded-output-string encoding @@ -79,7 +81,8 @@ a character encoding, like \"utf-8\"." "Decode the string represented by BV. The bytes in the bytevector will be interpreted according to ENCODING, which should be a string 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) (let ((p (open-bytevector-input-port bv))) (set-port-encoding! p encoding) |