Zip Component, Email Component, Encryption Component ActiveX Control for Zip Compression .NET Components for ASP.NET
ActiveX and .NET Components for Zip Compression, Encryption, Email, XML, S/MIME, HTML Email, Character Encoding, Digital Certificates, FTP, and more ASP Email ActiveX Component


Index of Chilkat Blog Posts

July 6, 2007

Mangling binary data with System.Text.ASCIIEncoding()

This error is very common. Somebody wants to convert non-character binary byte data to a string and tries to do it using System.Text.ASCIIEncoding.GetString. When byte(s) are encountered that have no representation in the character encoding, you’ll get a question mark character in your output string. For us-ascii, all bytes having the most significant bit set (i.e. 8-bit bytes) will be collapsed into one character: ‘?’. Here’s an example in C# that demonstrates the behavior:

	
            byte[] binaryData = new byte[256];
            int i;
            for (i = 0; i < 256; i++)
            {
                binaryData[i] = (byte)i;
            }
            String s0 = "";
            for (i = 0; i < 256; i++)
            {
                s0 = s0 + Convert.ToString(binaryData[i]) + ",";
                if (((i+1) % 10) == 0)
                {
                    s0 = s0 + "\r\n";
                }
            }
            // This is displayed:
            /*
0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,
50,51,52,53,54,55,56,57,58,59,
60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,
80,81,82,83,84,85,86,87,88,89,
90,91,92,93,94,95,96,97,98,99,
100,101,102,103,104,105,106,107,108,109,
110,111,112,113,114,115,116,117,118,119,
120,121,122,123,124,125,126,127,128,129,
130,131,132,133,134,135,136,137,138,139,
140,141,142,143,144,145,146,147,148,149,
150,151,152,153,154,155,156,157,158,159,
160,161,162,163,164,165,166,167,168,169,
170,171,172,173,174,175,176,177,178,179,
180,181,182,183,184,185,186,187,188,189,
190,191,192,193,194,195,196,197,198,199,
200,201,202,203,204,205,206,207,208,209,
210,211,212,213,214,215,216,217,218,219,
220,221,222,223,224,225,226,227,228,229,
230,231,232,233,234,235,236,237,238,239,
240,241,242,243,244,245,246,247,248,249,
250,251,252,253,254,255,
             * */
            textBox1.Text = s0;
	
            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
	
            // Do a simple round-trip conversion and then check to see if our binary data was mangled:
            String s = enc.GetString(binaryData);
            byte[] binaryData2 = enc.GetBytes(s);
	
            String s2 = "";
            for (i = 0; i < 256; i++)
            {
                s2 = s2 + Convert.ToString(binaryData2[i]) + ",";
                if (((i + 1) % 10) == 0)
                {
                    s2 = s2 + "\r\n";
                }
            }
            // The output:
            /*
0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,
50,51,52,53,54,55,56,57,58,59,
60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,
80,81,82,83,84,85,86,87,88,89,
90,91,92,93,94,95,96,97,98,99,
100,101,102,103,104,105,106,107,108,109,
110,111,112,113,114,115,116,117,118,119,
120,121,122,123,124,125,126,127,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,63,63,63,63,
63,63,63,63,63,63,
             * */
            textBox2.Text = s2;


Privacy Statement. Copyright 2000-2011 Chilkat Software, Inc. All rights reserved.
Send feedback to support@chilkatsoft.com

Components for Microsoft Windows XP, 2000, 2003 Server, Vista, Windows 7, and Windows 95/98/NT4.