Good question Dough and I don't have a good answer.
I don't remember the order in which we added this classes, but looking at the code, I think we might have some problems with the AsciiInterpreter in some locales and added the LiteralInterpreter, keeping the former for backward compatibility.
If you look at the implementation, AsciiInterpreter.interpret uses the String.length() while LiteralInterpreter uses the produced bytes length. They are the same with 8 bits characters, but spells trouble with unicode.
There's a problem with most ISO85838 interchanges, the rarely define the character encoding, so you get systems getting messages from different terminals using different encoding, and field 43 and 45 for example becomes nightmares.