I agree with Nathaniel that I don't like the idea of a separate character set
header. To be honest, I don't like the idea of a separate encoding header
either, because it creates silly states. I've gone along with it solely in
the interests of compromise (I'm still not sure I know what QUOTED-PRINTABLE
in IMAGE/FAX means, although I have a vague idea).
Suggestion: write down a matrix of all the variables and the states created.
You'll find that a two-dimensional matrix is bad enough; multi-dimensional
matrices get really ugly. When you find that the n-dimensional matrix is
heavily populated with silly states with a few sparse useful ones, you'll
wonder whether it won't be a good idea to reduce the rank of the matrix and
coerce the useful states so they fit in the resulting simpler matrix.
We have enough silly states with a separate encoding header. The whole issue
of banning nested encodings (and what to do when it happens in spite of the
ban) wouldn't have come up if the encoding was in the typing information;
MULTIPART and MESSAGE types just won't have a field for encoding in their
syntax.
Let's not add a new rank to the matrix by introducing character set as a new
vector, with one useful element (Text), two marginal ones (Text-Plus and
Message), and 6 silly ones (Multipart, Application, Binary, Image, Audio, and
Video).
Here's the current type/encoding matrix. Note that it could rather easily be
coerced into a vector:
7bit 8bit Binary BASE64 Quoted-Printable
Text OK OK? silly OK OK
Text-Plus OK OK? silly OK OK
Message OK NO? NO NO NO?
Multipart OK NO NO NO NO
Application NO NO NO NO NO
Binary silly silly OK? OK silly
Image silly silly OK? OK silly
Audio silly silly OK? OK silly
Video silly silly OK? OK silly
OK = appropriate for use
OK? = acceptability of usage questionable; definitely may NOT be used in
some environments and must be converted to an acceptable form.
silly = acceptable for use, but doesn't make any sense to do so.
NO? = probably should NOT be used, but may become acceptable within the
framework of certain guidelines.
NO = may NOT be used