Is there an existing class in C# that can convert Quoted-Printable encoding to String? Click on the above link to get more information on the encoding.
The following is quoted from the above link for your convenience.
Any 8-bit byte value may be encoded
with 3 characters, an “=” followed by
two hexadecimal digits (0–9 or A–F)
representing the byte’s numeric value.
For example, a US-ASCII form feed
character (decimal value 12) can be
represented by “=0C”, and a US-ASCII
equal sign (decimal value 61) is
represented by “=3D”. All characters
except printable ASCII characters or
end of line characters must be encoded
in this fashion.All printable ASCII characters
(decimal values between 33 and 126)
may be represented by themselves,
except “=” (decimal 61).ASCII tab and space characters,
decimal values 9 and 32, may be
represented by themselves, except if
these characters appear at the end of
a line. If one of these characters
appears at the end of a line it must
be encoded as “=09” (tab) or “=20”
(space).If the data being encoded contains
meaningful line breaks, they must be
encoded as an ASCII CR LF sequence,
not as their original byte values.
Conversely if byte values 13 and 10
have meanings other than end of line
then they must be encoded as =0D and
=0A.Lines of quoted-printable encoded data
must not be longer than 76 characters.
To satisfy this requirement without
altering the encoded text, soft line
breaks may be added as desired. A soft
line break consists of an “=” at the
end of an encoded line, and does not
cause a line break in the decoded
text.
There is functionality in the framework libraries to do this, but it doesn’t appear to be cleanly exposed. The implementation is in the internal class
System.Net.Mime.QuotedPrintableStream. This class defines a method calledDecodeByteswhich does what you want. The method appears to be used by only one method which is used to decode MIME headers. This method is also internal, but is called fairly directly in a couple of places, e.g., theAttachment.Namesetter. A demonstration:Produces the output:
You may have to do some testing to ensure carriage returns, etc are treated correctly although in a quick test I did they seem to be. However, it may not be wise to rely on this functionality unless your use-case is close enough to decoding of a MIME header string that you don’t think it will be broken by any changes made to the library. You might be better off writing your own quoted-printable decoder.