That is a way different question. If you wanted an enumeration type encoded in a specific way, e.g. UTF-8 then Ada has representation clause for that:
type Roman_Latin is
( ' ','a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','v','x','y','z'
);
for Roman_Latin use
( 'a' => 97, 'b' => 98, 'c' => 99, 'd' => 100,
'e' => 101, 'f' => 102, 'g' => 103, 'h' => 104,
'i' => 105, 'j' => 106, 'k' => 107, 'l' => 108,
'm' => 109, 'n' => 110, 'o' => 111, 'p' => 112,
'q' => 113, 'r' => 114, 's' => 115, 't' => 116,
'v' => 117, 'x' => 118, 'y' => 119, 'z' => 120,
' ' => 32
);
type Roman_String is array (Positive range <>) of Roman_Latin;
A : constant Roman_String := "veni vidi vici";
Here Roman_Latin characters have Unicode code points as values.
What you cannot do is to make Roman_Latin a subtype of Character or Wide_Character. The Ada type system supports only range constraints, no holes.