CodeXchange Saturday, June 23, 2018
Home
What's it?
Download
Register
My Snippets
Add Snippet
Search
Faq
Contact Us
Sponsors

Website hosted by


Code Snippet Preview

Review the code snippet before inserting it on your project.

Snippet Metadata
Summary: Decoding text encoded in Quoted-Printable format
Language: C#
Author: Prasad GVL
Author snippets RSS:
Culture: en-US
Bytes: 2701
Visual Studio 2005 Snippet:

Snippet Stats
Downloads: 8
Overall rating : 3
Average rating : Snippet rating

Snippet Preview
Code:
        /// 
        /// Returns string after decoding text, which was encoded in the Quoted Printable method.
        /// 
        /// Encoding used for the input data.
        /// String containing data to decode.
        /// 
        public static string QDecode(System.Text.Encoding encoding,string data)
      {
         MemoryStream dStrm = new MemoryStream();
         byte[] buffer, UnicodeChars;
         string str, encodedChar;
         int val;
         try
         {
            MemoryStream strm = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(data));
            int Byte = strm.ReadByte();
            while(Byte > -1)
            {
               // Hex eg. =E4
               if(Byte == '=')
               {
                  buffer = new byte[2];
                  strm.Read(buffer,0,2);
                  str=System.Text.Encoding.ASCII.GetString(buffer);
                  // When the data contains URLs, there is chance that normal characters appear after '=' symbol
                  // To handle this, we have to check whether the chars following '=' can be converted to Hexa or not
                  // If the chars cant be converted, then they should be converted as is
                  // i.e. program control goes to 'else' part
                  if(!(buffer[0] == '\r' && buffer[1] == '\n') //  followed by =, it's splitted line
                     && (IsHexChar(str.Substring(0,1)) && IsHexChar(str.Substring(1,1)))) // Make sure it is a Hex number
                  {
                     val = int.Parse(str,System.Globalization.NumberStyles.HexNumber);
                     encodedChar = encoding.GetString(new byte[]{(byte)val});
                     UnicodeChars = System.Text.Encoding.Unicode.GetBytes(encodedChar);
                     dStrm.Write(UnicodeChars,0,UnicodeChars.Length);
                  }
                  else
                  {
                     // There is some text after '=', so convert them as is.
                     // First convert the '=' symbol
                     encodedChar = encoding.GetString(new byte[]{(byte)Byte});
                     UnicodeChars = System.Text.Encoding.Unicode.GetBytes(encodedChar);
                     dStrm.Write(UnicodeChars,0,UnicodeChars.Length);
                     // Then convert the read 2 bytes, which are in buffer
                     encodedChar = encoding.GetString(buffer);
                     UnicodeChars = System.Text.Encoding.Unicode.GetBytes(encodedChar);
                     dStrm.Write(UnicodeChars,0,UnicodeChars.Length);
                  }              
               }
               else
               {
                  encodedChar = encoding.GetString(new byte[]{(byte)Byte});
                  UnicodeChars = System.Text.Encoding.Unicode.GetBytes(encodedChar);
                  dStrm.Write(UnicodeChars,0,UnicodeChars.Length);
               }
               Byte = strm.ReadByte();
            }
         }
         catch(Exception ex)
         {
            throw ex;
         }
         byte[] retchars=dStrm.ToArray();
         //Close the memory stream object
         dStrm.Close();
         return System.Text.Encoding.Unicode.GetString(retchars);
      }

Snippet Comments
Comments:
No comments for this snippet

Other snippets that may interest you..
Related Snippets
TDT - GridPage - Page_Init (C#)
CustomValitaor (C#)
(C#)
Get the file extension from a file path or file name (VB.NET)
grab record from db and subtracts it from variable (VB.NET)



Copyright ©2009-2018 CodeXchange. Server version 1.0.3720.32855 Client Version 0.9.0.0

With from Barcelona

Most Helpful members
These are the members who have received the most points for their helpful samples
Zepho Zep
Robert Wagner
Galen Taylor

All time 'Hall of fame'
Formating a file size and adding the B, KB, MB and GB extension appropriately with string.Format (C#)
INI File Access (VB.NET)
Read XML from string into DataSet (C#)
Create Manifest File for your Application (VB.NET)
Round function to avoid banker's rounding (VB.NET)
Get Short and Long Path Names (VB.NET)
Sending Mail through authenticated SMTP server (C#)
One Way Hash for strings (C#)
Formating a file size and adding the B, KB, MB and GB extension appropriately with string.Format (C#)
How do I load an image from a URI address? (VB.NET)
Use our easy to use Visual Studio.NET addin client and start sharing code snippets with the CodeXchange community!
Refreshed: Saturday, June 23, 2018