logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

base64 - base64-encode/decode binary data

Api

::base64::encode ?-maxlenmaxlen? ?-wrapcharwrapchar? 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.

              Notewell:  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::decodestring
              Base64  decodes  the  given string and returns the binary data.  The decoder ignores whitespace in
              the string.

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 notbehaviourallycompatible.

       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.

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 TcllibTrackers [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 unifieddiffs, 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.

Category

       Text processing

Description

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

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]]

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:Variationsindecodingbehaviour  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.

Keywords

       base64, encoding

Name

       base64 - base64-encode/decode binary data

Synopsis

       package require Tcl8.59

       package require base64?2.6.1?::base64::encode ?-maxlenmaxlen? ?-wrapcharwrapchar? string::base64::decodestring

________________________________________________________________________________________________________________

See Also