But one can confuse 0 with O, B with 8, 1 with I.
However we haven’t used WXYZ. Why not have an alphabet that omits B, I and O, and includes X, Y, Z?
Seems to me that such an alphabet would retain all the nice ASCII lexicographical ordering while at the same time be printable too.
I think B64 isn't meant to be human-readable anyway, and not having to deal with exceptions probably makes the code a LITTLE simpler?
How many "humans" actually try to read Base32Hex?
If readability is a goal, maybe use or computer covert to a different format. Computers don't confuse 0 with O, B with 8 and 1 with I.
1) by being "base32hex" the "hex" part resulted in inclusion of 0, 1, and 8.
2) whomever originally defined it simply did the most straightforward extension of appending "GHIJKLMNOPQRSTUV" without thought as to the fact that for some fonts, I O and B could be confused with the numbers with similar appearance.
The appending of the next sequential characters G through V also simplified the encoding/decoding algorithm [1] by only having one discontinuity (the gap between 9 and A) to contend with instead of four discontinuities (three of which are only one character position wide).
[1] the original algorithm was not likely implemented as a lookup table.
Base32 isn't supposed to be human readable and I don't think I've ever seen it printed so I don't think it matters. The point of Base32 is to encode binary in ascii.
Then, I don't have to worry about undoing decades of momentum.
> Why not have an alphabet that omits B, I and O, and includes X, Y, Z?
Because that would bring integer increment errors and require a significant overhaul of existing code bases and require careful checking.