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