From a certified dinosaur--
Look at an ASCII chart. If one were to develop a six bit code using a default of hex 20 through 5F you've got upper A-Z, all digits and a good assortment of punctuation. You could transmit hex 00 through 3F, (six bits) and the receiver could default-offset by Hex 20 to land you
at "Digits and Upper Case" section of the true ASCII standard, which might suffice for many operations.
Now burn or redefine the highest code, 3F, as the sentinel for a two character "Shift Offset" command. The highest character in your default is the underscore, which you would lose. The second character ShiftOffset sequence is limited to values between 0 and 7 decimal. Multiplied by 32 decimal, it is the ASCII table offset of all subsequent six bit codes. Your default ShiftOffset was 1.
A ShiftOffset sequence directs the receiver to shift it's ASCII lookup offset until another ShiftOffset sequence is sent. A ShiftOffset of 3 lands you in lower case a-z and a hatfull of non-English alphabet characters. A ShiftOffset of 6 gets you Greek symbols. A ShiftOffest of 1 gets you back to the default.
A side effect is that a ShiftOffset of 2 lands you in upper and lower case English without digits, and puts that previously shanghaied underscore where it is plain text (but now the DEL is burned for the ShiftOffset sentinel in this segment).
The math is simpler than it sounds, you just use each transmitted character as the low order six bits of ASCII code, and the low order two bits of the current ShiftOffset as the high order ASCII bits, and optionally watch for hex FF as a ShiftOffset change.
So, a simple Arduino sends out a 32 bit code and a simple receiver plugs the two high order bits and you've got ASCII 0-9 and upper case A-Z. You also get comma, decimal, dollar sign and all of the other special characters which are residual from the punch card days. Trust me, I was there. Go find an IBM 026 printing card punch at the Smithsonian, and that is the source of ASCII hex 23 through 3F. But I digress.)
A more ambitious Arduino sends out a 32 bit code with ShiftOffsets, and a simple receiver prints digits and upper case OK, attempted lower case is printed as upper case (because the ShiftOffset does NOT offset, nice), and the underscore prints as an underscore followed by an extraneous pound sign or something, hardly a deal-killer.
I would suggest that an ambitious Arduino actually transmit an initial ShiftOffset of 1 just to let the sophisticated receiver verify that we are dealing with tricked-out full ASCII.
And, an ambitious Arduino going to a sophisticated receiver not only talks Greek, Russian and draws simple boxes, but can also issue a carriage return for your TTY33 ASR.
You do have a Teletype model 33 Automatic Send and Receive sitting around that you've trying to get the carriage return to work on, haven't you?
"We computer geeks love Standards. That's why we have so many of them".