Provided by: tcllib_1.21+dfsg-1_all bug

NAME

       base64 - base64-encode/decode binary data

SYNOPSIS

       package require Tcl  8

       package require base64  ?2.5?

       ::base64::encode ?-maxlen maxlen? ?-wrapchar wrapchar? string

       ::base64::decode string

________________________________________________________________________________________________________________

DESCRIPTION

       This package provides procedures to encode binary data into base64 and back.

BEWARE: VARIATIONS IN DECODING BEHAVIOUR

       The Tcl core provides since version 8.6 commands for the de- and encoding of base64 data. These are

                  binary encode base64
                  binary decode base64

       Beware that while these are signature compatible with the commands provided by this package, the decoders
       are not behaviourally compatible.

       The core decoder command accepts the option -strict, enabling the user to choose between strict  and  lax
       modes.  In  the  strict mode invalid characters, and partial data at the end of the input are reported as
       errors. In lax mode they are ignored.

       All the implementations provided by this package on the other hand implement a mix of the above, and  the
       user cannot choose. Partial data at the end of the input is reported as error, and invalid characters are
       ignored.

       Beware of these differences when switching code from one to other.

API

       ::base64::encode ?-maxlen maxlen? ?-wrapchar wrapchar? string
              Base64 encodes the given binary string and returns  the  encoded  result.  Inserts  the  character
              wrapchar every maxlen characters of output. wrapchar defaults to newline. maxlen defaults to 76.

              Note that if maxlen is set to 0, the output will not be wrapped at all.

              Note  well:  If  your  string  is not simple ASCII you should fix the string encoding before doing
              base64 encoding. See the examples.

              The command will throw an error for negative values of maxlen, or if  maxlen  is  not  an  integer
              number.

       ::base64::decode string
              Base64  decodes  the  given string and returns the binary data.  The decoder ignores whitespace in
              the string.

IMPLEMENTATION NOTES

       This package contains three different implementations for base64 de- and encoding, and chooses among them
       based on the environment it finds itself in.

       All  three implementations have the same behaviour.  See also Beware: Variations in decoding behaviour at
       the beginning of this document.

       [1]    If Tcl 8.6 or higher is found the commands are implemented in terms of the then-available  builtin
              commands.

       [2]    If the Trf extension cand be loaded the commands are implemented in terms of its commands.

       [3]    If  neither  of  the  above are possible a pure Tcl implementation is used. This is of course much
              slower.

EXAMPLES

              % base64::encode "Hello, world"
              SGVsbG8sIHdvcmxk

              % base64::encode [string repeat xyz 20]
              eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6
              eHl6eHl6eHl6
              % base64::encode -wrapchar "" [string repeat xyz 20]
              eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6

              # NOTE: base64 encodes BINARY strings.
              % set chemical [encoding convertto utf-8 "C\u2088H\u2081\u2080N\u2084O\u2082"]
              % set encoded [base64::encode $chemical]
              Q+KCiEjigoHigoBO4oKET+KCgg==
              % set caffeine [encoding convertfrom utf-8 [base64::decode $encoded]]

BUGS, IDEAS, FEEDBACK

       This document, and the package it describes, will undoubtedly contain bugs and  other  problems.   Please
       report such in the category base64 of the Tcllib Trackers [http://core.tcl.tk/tcllib/reportlist].  Please
       also report any ideas for enhancements you may have for either package and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the output of diff -u.

       Note further that attachments are strongly preferred over inlined patches. Attachments  can  be  made  by
       going  to the Edit form of the ticket immediately after its creation, and then using the left-most button
       in the secondary navigation bar.

KEYWORDS

       base64, encoding

CATEGORY

       Text processing

COPYRIGHT

       Copyright (c) 2000, Eric Melski
       Copyright (c) 2001, Miguel Sofer