codext defines a far broader set of Base-encodings than in the original library.
This namely adds the classical BaseXX encodings like 16 (hexadecimal) and 32 (RFC 3548), which are not available in the native codecs.
Common base encodings with N a power of 2:
| Codec | Conversions | Aliases | Comment |
|---|---|---|---|
base2 |
text <-> Base2 encoded text | `(base[-_]?2 | bin)-inv(erted)?` |
base4 |
text <-> Base4 encoded text | base[-_]?4-inv(erted) |
Dynamic charset parameter [-_]..., amongst letters and digits (e.g. _6VC9) |
base8 |
text <-> Base8 encoded text | base[-_]?8-inv(erted) |
Charset: abcdefgh ; Dynamic charset parameter [-_]..., amongst letters and digits (e.g. _A5c96T7x) |
base16 |
text <-> Base16 encoded text | base[-_]?16-inv(erted) |
|
base32 |
text <-> Base32 encoded text | base[-_]?32-inv(erted), base32-crockford, base32_geohash, ... |
Also supports Base32 Crockford, Geohash and Hex |
zbase32 |
text <-> ZBase32 encoded text | z[-_]?base[-_]?32 |
Human-oriented Base32 |
base64 |
text <-> Base64 encoded text | base[-_]?64-inv(erted) |
!!! note "Aliases"
All the aliases are case insensitive for base encodings.
>>> codext.encode("test", "base2")
'01110100011001010111001101110100'
>>> codext.encode("test", "base2-inv")
'10001011100110101000110010001011'>>> codecs.encode("this is a test", "base16")
'7468697320697320612074657374'
>>> codecs.decode("7468697320697320612074657374", "base16")
'this is a test'
>>> codecs.encode("this is a test", "base16-inv")
'1E02031DCA031DCA0BCA1E0F1D1E'>>> codext.encode("this is a test", "base32")
'ORUGS4ZANFZSAYJAORSXG5A='
>>> codext.decode("ORUGS4ZANFZSAYJAORSXG5A=", "base32")
'this is a test'Note that for base64, it overwrites the native base64_codec to also support en/decoding from str.
>>> codecs.encode("this is a test", "base64")
'dGhpcyBpcyBhIHRlc3Q='
>>> codecs.decode("dGhpcyBpcyBhIHRlc3Q=", "base64")
'this is a test'| Codec | Conversions | Aliases | Comment |
|---|---|---|---|
base3 |
text <-> Base3 encoded text | `base[-_]?3( | [-_]inv(erted)?)` |
base10 |
text <-> Base10 encoded text | `base[-_]?10 | int(?:eger)? |
base11 |
text <-> Base11 encoded text | `base[-_]?11( | [-_]inv(erted)?)` |
base36 |
text <-> Base36 encoded text | `base[-_]?36( | [-_]inv(erted)?)` |
base45 |
text <-> Base45 encoded text | `base[-_]?45( | [-_]inv(erted)?)` |
base58 |
text <-> Base58 encoded text | `base[-_]?58( | [-_](bc |
base62 |
text <-> Base62 encoded text | `base[-_]?62( | [-_]inv(erted)?)` |
base63 |
text <-> Base63 encoded text | `base[-_]?63( | [-_]inv(erted)?)` |
base91 |
text <-> Base91 encoded text | `base[-_]?91( | [-_]inv(erted)?)` |
base91-alt |
text <-> Alternate Base91 encoded text | `base[-]?91[-]alt(?:ernate)?( | [-_]inv(erted)?)` |
>>> codext.encode("test", "base3")
'23112113223321323322'>>> codecs.encode("test", "base36")
'WANEK4'
>>> codecs.decode("4WMHTK6UZL044O91NKCEB8", "base36")
'this is a test'>>> codext.encode("this is a test!", "base45")
'AWE+EDH44.OEOCC7WE QEX0'
>>> codext.decode('AWE+EDH44.OEOCC7WE QEX0', "base45")
'this is a test!'>>> codext.encode("this is a test", "base58")
'jo91waLQA1NNeBmZKUF'
>>> codext.encode("this is a test", "base58-ripple")
'jo9rA2LQwr44eBmZK7E'
>>> codext.encode("this is a test", "base58-url")
'JN91Wzkpa1nnDbLyjtf'>>> codecs.encode("test", "base62")
'289lyu'
>>> codecs.encode("this is a test", "base62")
'CsoB4HQ5gmgMyCenF7E'>>> codecs.encode("This is a test !", "base91")
'nX,<:WRT%yxth90oZB^C'
>>> codext.encode("This is a test !", "base91-alt")
'?a&[jv4S3Wg>,71@Jo#K'!!! note "Generic encodings"
Base encodings are available for any N other than the ones explicitely specified using the "`-generic`" suffix. Their charsets consist of printable characters from the `string` module for N up to 100 and for characters composed from the 256 possible ordinals for a greater N.
:::python
>>> codext.encode("test", "base3-generic")
'12001002112210212211'
>>> codext.encode("test", "base17-generic")
'4cf60456'
This encoding implements various different versions of Base85.
| Codec | Conversions | Aliases | Comment |
|---|---|---|---|
base85 |
text <-> ascii85 | `(base[-_]?85(?: | [-_](?:adobe |
>>> codext.encode("this is a test", "ascii85")
"FD,B0+DGm>@3BZ'F*%"
>>> codext.decode("FD,B0+DGm>@3BZ'F*%", "ascii85")
'this is a test'
>>> with open("ascii85.txt", 'w', encoding="ascii85") as f:
f.write("this is a test")
14
>>> with open("ascii85.txt", encoding="ascii85") as f:
f.read()
'this is a test'| Codec | Conversions | Aliases | Comment |
|---|---|---|---|
base100 |
text <-> Base100 encoded text | `base[-_]?100 | emoji` |
base122 |
text <-> Base122 encoded text | base[-_]?122 |
Python 3 only |
base128 |
text <-> Base128 encoded text | base[-_]?128 |
Relies on the ASCII charset |
>>> codecs.encode("this is a test", "base100")
'👫👟👠👪🐗👠👪🐗👘🐗👫👜👪👫'
>>> codecs.decode("👫👟👠👪🐗👠👪🐗👘🐗👫👜👪👫", "base100")
'this is a test'>>> codecs.encode("this is a test", "base122")
':\x1aʗ\x19\x01Rs\x10\x18$\x07#\x15ft'
>>> codecs.decode(":\x1aʗ\x19\x01Rs\x10\x18$\x07#\x15ft", "base122")
'this is a test'