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