encode and decode functions
The encode function encodes binary data into one of several textual
representations. The decode function does the reverse.
Signatures
encode(b: bytea, format: text) -> text
decode(s: text, format: text) -> bytea
Details
Supported formats
The following formats are supported by both encode and decode.
base64
The base64 format is defined in Section 6.8 of RFC 2045.
To comply with the RFC, the encode function inserts a newline (\n) after
every 76 characters. The decode function ignores any whitespace in its input.
escape
The escape format renders zero bytes and bytes with the high bit set (0x80 -
0xff) as an octal escape sequence (\nnn), renders backslashes as \\, and
renders all other characters literally. The decode function rejects invalid
escape sequences (e.g., \9 or \a).
hex
The hex format represents each byte of input as two hexadecimal digits, with
the most significant digit first. The encode function uses lowercase for the
a-f digits, with no whitespace between digits. The decode function accepts
lowercase or uppercase for the a - f digits and permits whitespace between
each encoded byte, though not within a byte.
Examples
Encoding and decoding in the base64 format:
SELECT encode('\x00404142ff', 'base64');
encode
----------
AEBBQv8=
SELECT decode('A EB BQv8 =', 'base64');
decode
--------------
\x00404142ff
SELECT encode('This message is long enough that the output will run to multiple lines.', 'base64');
encode
------------------------------------------------------------------------------
VGhpcyBtZXNzYWdlIGlzIGxvbmcgZW5vdWdoIHRoYXQgdGhlIG91dHB1dCB3aWxsIHJ1biB0byBt+
dWx0aXBsZSBsaW5lcy4=
Encoding and decoding in the escape format:
SELECT encode('\x00404142ff', 'escape');
encode
-------------
\000@AB\377
SELECT decode('\000@AB\377', 'escape');
decode
--------------
\x00404142ff
Encoding and decoding in the hex format:
SELECT encode('\x00404142ff', 'hex');
encode
------------
00404142ff
SELECT decode('00 40 41 42 ff', 'hex');
decode
--------------
\x00404142ff