This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home.

Source for wiki CharacterConversionCowan version 3

author

cowan

comment


    

ipnr

127.11.51.1

name

CharacterConversionCowan

readonly

0

text

== Character conversion ==

These routines are loosely based on the Gauche [http://practical-scheme.net/gauche/man/gauche-refe_78.html gauche.charconv] package, which in turn is based on [https://www.gnu.org/savannah-checkouts/gnu/libiconv GNU libiconv].

== Character encoding schemes ==

A ''character encoding scheme'' or ''CES'' is an algorithm for translating between a sequence of bytes and a sequence of characters and vice versa.  Converting bytes to characters is ''decoding''; converting characters to bytes is ''encoding''.  Typical CESes include ASCII, UTF-8, ISO-8859-1, and TIS-620; each one is named by a case-insensitive string.

`(ces-valid? `''ces''`)`

Returns `#t` if it is possible to convert between ''ces'' and the implementation-dependent internal CES of Scheme strings, and `#f` otherwise.

`(ces-conversion-supported? `''ces,,1,, ces,,2,,''`)`

Returns `#t` if it is possible to convert between ''ces,,1,,'' and ''ces,,2,,'' and `#f` otherwise.

`(ces-guess `''bytevector'' [ ''hint'' ]`)`

Returns a CES which might be the correct encoding of the bytes in ''bytevector''.  If ''hint'' is provided, it is a possible CES which gives a possibly helpful indication of the correct CES.  For example, given a hint of "UTF-8", this procedure might return "UTF-8" if ''bytevector'' contains well-formed UTF-8, or "ISO-8859-1" if it does not.

== String and bytevector conversion ==

`(string->bytevector `''ces string''`)`

Uses ''ces'' to encode ''string'' into a newly allocated bytevector, which is returned.

`(bytevector->string `''ces bytevector''`)`

Uses ''ces'' to decode ''bytevector'' into a newly allocated string, which is returned.

`(transcode-bytevector `''ces,,1,, ces,,2,, bytevector''`)`

Uses ''ces,,1,,'' to decode ''bytevector'' into a string, which is then encoded into a newly allocated bytevector using ''ces,,2,,''.  However, the string need not actually be created.

== Conversion ports ==

All of these procedures accept an optional ''size'' argument, specifying the size of an internal conversion buffer in bytes.  It is an error if ''size'' is not a non-negative exact integer.  If ''size'' is 0, there is no internal buffer.  If ''size'' is omitted, the size of the buffer is implementation-dependent.

`(make-decoded-input-port `''binary-port ces'' [ ''size'' ]`)`

Returns a textual input port which, when read from, reads bytes from ''binary-port'', decodes them as characters using ''ces'', and provides the characters to the reader.

`(make-encoded-output-port `''binary-port ces'' [ ''size'' ]`)`

Returns a textual output port which, when characters are written to it, encodes them as characters using ''ces'', and writes the bytes to ''binary-port''.

`(make-encoded-binary-input-port `''textual-port ces'' [ ''size'' ]`)`

Returns a binary input port which, when read from, reads characters from ''textual-port'', encodes them as characters using ''ces'', and provides the bytes to the reader.

`(make-decoded-binary-output-port `''textual-port ces'' [ ''size'' ]`)`

Returns a binary output port which, when bytes are written to it, decodes them as characters using ''ces'', and writes the characters to ''textual-port''.

`(make-transcoded-binary-input-port `''binary-port ces,,1,, ces,,2,,'' [ ''size'' ]`)`

Returns a binary input port which, when read from, reads bytes from ''binary-port'', decodes them as characters using ''ces,,1,,'', encodes the resulting characters as bytes using ''ces,,2,,'', and provides the bytes to the reader.

`(make-transcoded-binary-output-port `''binary-port ces,,1,, ces,,2,,'' [ ''size'' ]`)`

Returns a binary output port which, when bytes are written on it, decodes them as characters using ''ces,,1,,'', encodes the resulting characters as bytes using ''ces,,2,,'', and writes the bytes on ''binary-port''.




time

2015-03-19 23:18:04

version

3