Re: 6 to 8
The Burroughs Large Systems, dating back to about 1970 but still in use today as the Unisys Clearpath range, were interesting in this respect. Originally character data was 6-bit. 7-bit ASCII support was added and 8-bit EBCDIC which became the normal way of handling character data. Eventually 6-bit was retired in the hardware. The word on these machines was 48 bits so the character size indicated the packing: a word could hold 8 6-bit characters, 6 ASCII or EBCDIC characters (ASCII being padded) or 12 Hexadecimal characters. A word could also contain a real, integer, boolean, complex (over two words) and so on.
Things used in string manipulation, such as Algol SCAN and REPLACE, used character pointers with a length expressed in the appropriate unit for the character size of that string. E.g. you could declare EBCDIC POINTER P then perform operations on it that knew that it was 8-bit units encoded in EBCDIC. Other data structures such as arrays could be SIMILARLY typed.
EBCDIC ARRAY EA[0:79;
HEX ARRAY HA[0:11];
ASCII ARRAY AA[0:131];
An efficient TRANSLATE was supplied.
REPLACE EA[0] BY AA[0] WITH ASCIITOEBCDIC.
Fascinating machines.