package encodingProfile;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class EncodingProfile 
{

	public static void main(String[] args) 
	{
		String fileName;
		boolean verbose = false;
    	File file = null;
    	FileInputStream fileStream = null;
    	BufferedInputStream stream = null;
    	long lineNumber;
    	long columnNumber;
		int currentByte;
		int previousByte = -1;
		int nextByte = -1;
        lineNumber = 1;
        columnNumber = 0;
        boolean done;
        long byteCount[] = new long[256];
        long totalBytes;
        int i;
		long windowsLineEnds = 0;
	    long unixLineEnds = 0;
	    long nakedCarriageReturns = 0;
	    Calendar dateTimeRunStarted;
	    Calendar dateTimeRunEnded;
	    SimpleDateFormat dateFormat;
		long runTimeSeconds;
		int hours;
		int minutes;
		int seconds;
		int continuationBytesExpected = 0;
		int continuationBytesFound = 0;
		int multiByteSequence[] = new int[4]; // UTF-8 only: [0] = leading Byte; [1], [2] & [3] = Continuation Bytes
		int controlCharacters = 0;            // hex 00 to 1f, and hex 7f
		long windows1252Bytes = 0;            // Bytes that could be Windows-1252 (hex 80 to ff, but excluding 81, 8d, 8f, 90, 9d)
		long utf8LeadingBytes = 0;            // Bytes that could be UTF-8 Leading Bytes (hex c2 to f4) 
		long utf8ContinuationBytes = 0;       // Bytes that could be UTF-8 Continuation Bytes (hex 80 to bf) 
		long invalidUtf8Bytes = 0;            // Bytes that should never appear in UTF-8 (hex c0, c1 and f5 to ff)
		long iso8859Bytes = 0;                // Bytes that could be ISO 8859 (hex a0 to ff)
		long nakedContinuationBytes = 0;      // Bytes that could be UTF-8 Continuation (hex 80 to bf) but are not preceded by a UTF-8 Leading Byte (hex c2 to f4)
		long unsatisfiedUtf8LeadingBytes = 0; // UTF-8 Leading bytes without the expected number of Continuation bytes 
		NumberFormat numberFormat;
		NumberFormat decimalFormat;
		DecimalFormat byteCountFormat;
		StringBuffer line;
		StringBuffer utf8Sequence;

	    
		dateTimeRunStarted = Calendar.getInstance();
		
		decimalFormat = NumberFormat.getInstance();
    	decimalFormat.setMinimumIntegerDigits(3);

    	byteCountFormat = new DecimalFormat("###,###,###,##0");
	    
	    fileName = new String(args[0]);	
	    if (args.length > 1)
	    {
	    	if 
	    	(
	    		args[1].equalsIgnoreCase("true") ||
	    		args[1].equalsIgnoreCase("t") ||
	    		args[1].equalsIgnoreCase("yes") ||
	    		args[1].equalsIgnoreCase("y") ||
	    		args[1].equalsIgnoreCase("1")
	    	)
	    	{
	    		verbose = true;
	    	}
	    }
	    
		file = new File(fileName);        
        				
		try 
		{
			fileStream = new FileInputStream(file);
		} 
		catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		}
		
		stream = new BufferedInputStream(fileStream);
			
		try 
		{
			nextByte = stream.read();
		} 
		catch (IOException e) 
		{
			System.out.println("Failed to read line " + lineNumber + ", position " + columnNumber);
			e.printStackTrace();
		}

		System.out.println("Scanning file: " + fileName);
		
		if (nextByte == -1)
			System.out.println("File is empty");
		
		totalBytes = 1;
		
		for (i = 0; i < 256; i++)
			byteCount[i] = 0L;
		
		done = false;
		while (!done)
		{
			columnNumber++;
			currentByte = nextByte;
			try 
			{
				nextByte = stream.read();
			} 
			catch (IOException e) 
			{
				System.out.println("Failed to read line " + lineNumber + ", position " + columnNumber);
				e.printStackTrace();
			}

			if (nextByte == -1)
				done = true;
			
			byteCount[currentByte]++;
			totalBytes++;
			
			if ((currentByte < 32) || (currentByte == 127))
			{
				if (currentByte == 10)  // newline
				{
					lineNumber++;
					columnNumber = 0;
					if (previousByte == 13)
						windowsLineEnds++;
					else
					    unixLineEnds++;
				}
				else if (currentByte == 13)  // carriage return
				{
					if (nextByte != 10)
					{
						nakedCarriageReturns++;
						if (verbose)
						{
							System.out.println
							(
								"Line: " + 
								lineNumber + 
								", column: " + 
								columnNumber + 
								"  Carriage return (hex 0d) without newline (hex 0a)"
							);
						}
					}
				}
				else
				{
					controlCharacters++;
					if (verbose)
					{
						System.out.println
						(
							"Line: " + 
							lineNumber + 
							", column: " + 
							columnNumber + 
							"  Found control character Decimal: " + 
							currentByte +
							", Hex: " +
							toHex(currentByte) +
							", Octal: " +
							toOctal(currentByte) +
							", " +
							utf8Description(currentByte)
						);
					}
				}
			}
			
			if ((currentByte >= 128) && (currentByte <= 191))
			{
				utf8ContinuationBytes++;
				continuationBytesFound++;
				if (continuationBytesExpected > 0)
				{
					multiByteSequence[continuationBytesFound] = currentByte;					
					continuationBytesExpected--;
					if (continuationBytesExpected == 0)
					{
						if (verbose)
						{
							utf8Sequence = new StringBuffer("Valid UTF-8 multi-byte sequence: ");
							utf8Sequence.append(toHex(multiByteSequence[0]) + " " + toHex(multiByteSequence[1]));
							if (multiByteSequence[2] > 0)
								utf8Sequence.append(" " + toHex(multiByteSequence[2]));
							if (multiByteSequence[3] > 0)
								utf8Sequence.append(" " + toHex(multiByteSequence[3]));
							utf8Sequence.append("  Unicode Code Point: " + toCodePoint(multiByteSequence));
							System.out.println(utf8Sequence);
						}
					}
				}
				else
				{
					nakedContinuationBytes++;
					if (verbose)
					{
						System.out.println
						(
							"Line: " + 
							lineNumber + 
							", column: " + 
							columnNumber + 
							"  Found UTF-8 Continuation byte without preceding UTF-8 Leading byte " + 
							currentByte +
							", Hex: " +
							toHex(currentByte) +
							", Octal: " +
							toOctal(currentByte) +
							", " +
							utf8Description(currentByte) +
							", " +
							windows1252Description(currentByte)
						);				
					}
				}
			}
			else
			{
				if (continuationBytesExpected > 0)
				{
					unsatisfiedUtf8LeadingBytes++;
					continuationBytesExpected = 0;
					if (verbose)
					{
						System.out.println
						(
							"Line: " + 
							lineNumber + 
							", column: " + 
							columnNumber + 
							"  Not enough UTF-8 Continuation bytes for preceding UTF-8 Leading byte " + 
							multiByteSequence[0] +
							", Hex: " +
							toHex(multiByteSequence[0]) +
							", Octal: " +
							toOctal(multiByteSequence[0])
						);				
					}
				}
			}

			if ((currentByte >= 194) && (currentByte <= 244))
			{
				utf8LeadingBytes++;
				multiByteSequence[0] = currentByte;
				multiByteSequence[1] = 0;
				multiByteSequence[2] = 0;
				multiByteSequence[3] = 0;
				continuationBytesFound = 0;
				if ((currentByte >= 194) && (currentByte <= 223))
				{
					continuationBytesExpected = 1;
				}
				else if ((currentByte >= 224) && (currentByte <= 239))
				{
					continuationBytesExpected = 2;
				}
				else if ((currentByte >= 240) && (currentByte <= 244))
				{
					continuationBytesExpected = 3;
				}
				if (verbose)
				{
					System.out.println
					(
						"Line: " + 
						lineNumber + 
						", column: " + 
						columnNumber + 
						"  Found UTF-8 leading byte " + 
						currentByte +
						", Hex: " +
						toHex(currentByte) +
						", Octal: " +
						toOctal(currentByte) +
						", " +
						utf8Description(currentByte) +
						", " +
						windows1252Description(currentByte)
					);
				}
			}
			else if 
			(
			    (currentByte == 192) ||
			    (currentByte == 193) ||
				(currentByte >= 245) && (currentByte <= 255)
			)
			{
				invalidUtf8Bytes++;
				if (verbose)
				{
					System.out.println
					(
						"Line: " + 
						lineNumber + 
						", column: " + 
						columnNumber + 
						"  Found invalid UTF-8 byte, " + 
						currentByte +
						", Hex: " +
						toHex(currentByte) +
						", Octal: " +
						toOctal(currentByte) +
						", " +
						utf8Description(currentByte) +
						", " +
						windows1252Description(currentByte)
					);
				}
			}
			// Other tests for ranges that overlap with some of those above
			if ((currentByte >= 128) && (currentByte <= 191))
			if 
			(
				(currentByte >= 128) && 
				(currentByte <= 191) &&
				(currentByte != 129) &&
				(currentByte != 141) &&
				(currentByte != 143) &&
				(currentByte != 144) &&
				(currentByte != 157)			
			)
			{
				windows1252Bytes++;
			}
			if ((currentByte >= 128) && (currentByte <= 255))
			{
				iso8859Bytes++;
			}
			previousByte = currentByte;
		}

		System.out.println ("");
        System.out.println ("+------------------------------------------------------------|-----------------+");
		System.out.println ("| Lines:                                                     | " + padLeft(byteCountFormat.format(lineNumber), 15) + " |");
		System.out.println ("| Bytes:                                                     | " + padLeft(byteCountFormat.format(totalBytes), 15) + " |");
		System.out.println ("| Windows line ends:                                         | " + padLeft(byteCountFormat.format(windowsLineEnds), 15) + " |");
		System.out.println ("| UNIX line ends:                                            | " + padLeft(byteCountFormat.format(unixLineEnds), 15) + " |");
		System.out.println ("| Control Characters (excluding newline & carriage return):  | " + padLeft(byteCountFormat.format(controlCharacters), 15) + " |");
		System.out.println ("| UTF-8 Leading bytes:                                       | " + padLeft(byteCountFormat.format(utf8LeadingBytes), 15) + " |");
		System.out.println ("| UTF-8 Continuation bytes:                                  | " + padLeft(byteCountFormat.format(utf8ContinuationBytes), 15) + " |");
		System.out.println ("| UTF-8 Leading bytes without enough Continuation bytes:     | " + padLeft(byteCountFormat.format(unsatisfiedUtf8LeadingBytes), 15) + " |");
		System.out.println ("| UTF-8 Continuation bytes without a preceding Leading byte: | " + padLeft(byteCountFormat.format(nakedContinuationBytes), 15) + " |");
		System.out.println ("| UTF-8 Invalid bytes:                                       | " + padLeft(byteCountFormat.format(invalidUtf8Bytes), 15) + " |");
		System.out.println ("| Byte values specific to Windows 1252:                      | " + padLeft(byteCountFormat.format(windows1252Bytes), 15) + " |");
		System.out.println ("| Byte values valid in ISO 8859 and Windows 12xx families:   | " + padLeft(byteCountFormat.format(iso8859Bytes), 15) + " |");
		System.out.println ("| Carriage returns without newline:                          | " + padLeft(byteCountFormat.format(nakedCarriageReturns), 15) + " |");
        System.out.println ("+------------------------------------------------------------|-----------------+");
		
		System.out.println ("");

		System.out.println ("+-----+-----+-----+-----------------+-----------+--------+----------+------------------------------+--------------+--------------------------------------------------+");
		System.out.println ("|     |     |     |                 |   ASCII   |   C    | teletype | Name (W = Windows-1252,      | Specific to  |                   UTF-8 Group                    |");
		System.out.println ("| Dec | Hex | Oct | Number of Bytes | Printable | Escape | notation | I = ISO 8859-1, C = Control  | Windows-1252 |Leading Byte(n) = first byte of an n-byte sequence|");
		System.out.println ("+-----+-----+-----+-----------------+-----------+--------+----------+------------------------------+--------------+--------------------------------------------------+");

		for (i = 0; i < 256; i++)
		{
			line = new StringBuffer("");
			
			line.append
			(
				"| " +
				decimalFormat.format(i) + 
				" |  " + 
				toHex(i) + 
				" | " + 
				toOctal(i) + 
				" | " +
				padLeft(byteCountFormat.format(byteCount[i]), 15) +
				" |" 
			);
			
			if ((i > 31) && (i < 127))
				line.append("     " + asciiPrintable(i) + "     |");
			else
				line.append("           |");
			
			if (i < 32)
				line.append("   " + cEscape(i) + "   |");
			else
				line.append("        |");
			
			if (i < 32)
				line.append("    " + teletypeNotation(i) + "    |");
			else if (i == 127)
				line.append("    ^?    |");				
			else
				line.append("          |");
			
			line.append(" " + padRight(characterName(i), 28) + " |");
			
			if 
			(
				(i >= 128) && (i <= 159) &&
				(i != 129) &&
				(i != 141) &&
				(i != 143) &&
				(i != 144) &&
				(i != 157)
			)
			{
				line.append("     Yes      |");
			}
			else
			{
				line.append("              |");
			}

			line.append(" " + padRight(utf8Group(i), 48) + " |");
			
			System.out.println(line);
		}
		System.out.println ("+-----+-----+-----+-----------------+-----------+--------+----------+------------------------------+--------------+--------------------------------------------------+");
		System.out.println ("");
		
		
		dateTimeRunEnded = Calendar.getInstance();
		
    	dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
		System.out.println("Start Time: " + dateFormat.format(dateTimeRunStarted.getTime()));
		System.out.println("End Time: " + dateFormat.format(dateTimeRunEnded.getTime()));
		
		runTimeSeconds = (dateTimeRunEnded.getTimeInMillis() - dateTimeRunStarted.getTimeInMillis()) / 1000;
		hours = (int)runTimeSeconds / 3600;
		minutes = (int)(runTimeSeconds - (hours * 3600)) / 60;
		seconds = (int)((runTimeSeconds - (hours * 3600)) - minutes * 60);

		numberFormat = NumberFormat.getInstance();
    	numberFormat.setMinimumIntegerDigits(2);
		
		System.out.println
		(
			"Elapsed Time: " + 
			numberFormat.format(hours) + 
			":" + 
			numberFormat.format(minutes) + 
			":" + 
			numberFormat.format(seconds)
		);

	}
	
	static String toHex(int decimalByte)
	{
		final char[] HEX_CHARS = "0123456789abcdef".toCharArray();
		char c;
		int nibble;
		StringBuffer hexStringBuffer;
		
		hexStringBuffer = new StringBuffer("");
		nibble = (decimalByte & 0xf0) >>> 4;
		c = HEX_CHARS[nibble];
		hexStringBuffer.append(c);
		nibble = (decimalByte & 0x0f);
		c = HEX_CHARS[nibble];
		hexStringBuffer.append(c);		
		
		return hexStringBuffer.toString();
	}
	
	static String toOctal(int decimalByte)
	{
		final char[] OCTAL_CHARS = "01234567".toCharArray();
		char c;
		int octalDigit;
		StringBuffer octalStringBuffer;
		
		octalStringBuffer = new StringBuffer("");
		octalDigit = (decimalByte & 0xc0) >>> 6;
		c = OCTAL_CHARS[octalDigit];
		octalStringBuffer.append(c);
		octalDigit = (decimalByte & 0x38) >>> 3;
		c = OCTAL_CHARS[octalDigit];
		octalStringBuffer.append(c);		
		octalDigit = (decimalByte & 0x07);
		c = OCTAL_CHARS[octalDigit];
		octalStringBuffer.append(c);		
		
		return octalStringBuffer.toString();
	}
	
	static String toCodePoint (int[] multiByteSequence)
	{
		String codePoint = null;
		int codePointAsInt;
		
		if ((multiByteSequence[0] & 0xf0) == 0xf0)
		{
//          4-byte sequence			
			codePointAsInt = 
			(
				((multiByteSequence[0] & 0x07) << 18) | 
			    ((multiByteSequence[1] & 0x3f) << 12) |
			    ((multiByteSequence[3] & 0x3f) << 6) |
			    (multiByteSequence[3] & 0x3f)
			);
			codePoint = new String
			(
				toHex((codePointAsInt & 0xff0000) >>> 16) + 
				toHex((codePointAsInt & 0xff00) >>> 8) + 
				toHex(codePointAsInt & 0xff)	
			);			
		}
		else if ((multiByteSequence[0] & 0xe0) == 0xe0)
		{
//          3-byte sequence	
			codePointAsInt = 
			(
				((multiByteSequence[0] & 0x0f) << 12) | 
			    ((multiByteSequence[1] & 0x3f) << 6) |
			    (multiByteSequence[2] & 0x3f)
			);
			codePoint = new String
			(
				toHex((codePointAsInt & 0xff00) >>> 8) + toHex(codePointAsInt & 0xff)	
			);			
		}
		else if ((multiByteSequence[0] & 0xc0) == 0xc0)
		{
//          2-byte sequence	
			codePointAsInt = ((multiByteSequence[0] & 0x1f) << 6) | (multiByteSequence[1] & 0x3f);
			codePoint = new String
			(
				toHex((codePointAsInt & 0xff00) >>> 8) + toHex(codePointAsInt & 0xff)	
			);
		}
		else
		{
//          1-byte sequence			
		    codePoint = new String(toHex(multiByteSequence[0]));
		}
		
		return "U+" + codePoint;
	}
	
	public static String padRight(String s, int n)     // Thank you StackOverflow
	{
	     return String.format("%1$-" + n + "s", s);  
	}

	public static String padLeft(String s, int n)      // Thank you StackOverflow
	{
	    return String.format("%1$" + n + "s", s);  
	}
	
	static String asciiPrintable(int decimalByte)
	{
		final String[] ASCII_PRINTABLE =
		{
			" ",   // Hex 20
			"!",   // Hex 21
			"\"",  // Hex 22
			"#",   // Hex 23
			"$",   // Hex 24
			"%",   // Hex 25
			"&",   // Hex 26
			"'",   // Hex 27
			"(",   // Hex 28
			")",   // Hex 29
			"*",   // Hex 2a
			"+",   // Hex 2b
			",",   // Hex 2c
			"-",   // Hex 2d
			".",   // Hex 2e
			"/",   // Hex 2f
			"0",   // Hex 30
			"1",   // Hex 31
			"2",   // Hex 32
			"3",   // Hex 33
			"4",   // Hex 34
			"5",   // Hex 35
			"6",   // Hex 36
			"7",   // Hex 37
			"8",   // Hex 38
			"9",   // Hex 39
			":",   // Hex 3a
			";",   // Hex 3b
			"<",   // Hex 3c
			"=",   // Hex 3d
			">",   // Hex 3e
			"?",   // Hex 3f
			"@",   // Hex 40
			"A",   // Hex 41
			"B",   // Hex 42
			"C",   // Hex 43
			"D",   // Hex 44
			"E",   // Hex 45
			"F",   // Hex 46
			"G",   // Hex 47
			"H",   // Hex 48
			"I",   // Hex 49
			"J",   // Hex 4a
			"K",   // Hex 4b
			"L",   // Hex 4c
			"M",   // Hex 4d
			"N",   // Hex 4e
			"O",   // Hex 4f
			"P",   // Hex 50
			"Q",   // Hex 51
			"R",   // Hex 52
			"S",   // Hex 53
			"T",   // Hex 54
			"U",   // Hex 55
			"V",   // Hex 56
			"W",   // Hex 57
			"X",   // Hex 58
			"Y",   // Hex 59
			"Z",   // Hex 5a
			"[",   // Hex 5b
			"\\",  // Hex 5c
			"]",   // Hex 5d
			"^",   // Hex 5e
			"_",   // Hex 5f
			"`",   // Hex 60
			"a",   // Hex 61
			"b",   // Hex 62
			"c",   // Hex 63
			"d",   // Hex 64
			"e",   // Hex 65
			"f",   // Hex 66
			"g",   // Hex 67
			"h",   // Hex 68
			"i",   // Hex 69
			"j",   // Hex 6a
			"k",   // Hex 6b
			"l",   // Hex 6c
			"m",   // Hex 6d
			"n",   // Hex 6e
			"o",   // Hex 6f
			"p",   // Hex 70
			"q",   // Hex 71
			"r",   // Hex 72
			"s",   // Hex 73
			"t",   // Hex 74
			"u",   // Hex 75
			"v",   // Hex 76
			"w",   // Hex 77
			"x",   // Hex 78
			"y",   // Hex 79
			"z",   // Hex 7a
			"{",   // Hex 7b
			"|",   // Hex 7c
			"}",   // Hex 7d
			"~"    // Hex 7e
		};
		
		return ASCII_PRINTABLE[decimalByte - 32];
	}
	
	static String cEscape(int decimalByte)
	{
		final String[] C_ESCAPE =
		{
				"\\0",  // Hex 00
				"  ",   // Hex 01 
				"  ",   // Hex 02 
				"  ",   // Hex 03
				"  ",   // Hex 04 
				"  ",   // Hex 05 
				"  ",   // Hex 06
				"\\a",  // Hex 07
				"\\b",  // Hex 08
				"\\t",  // Hex 09
				"\\n",  // Hex 0a
				"\\v",  // Hex 0b
				"\\f",  // Hex 0c
				"\\r",  // Hex 0d
				"  ",   // Hex 0e
				"  ",   // Hex 0f
				"  ",   // Hex 10
				"  ",   // Hex 11
				"  ",   // Hex 12
				"  ",   // Hex 13
				"  ",   // Hex 14
				"  ",   // Hex 15
				"  ",   // Hex 16
				"  ",   // Hex 17
				"  ",   // Hex 18
				"  ",   // Hex 19
				"  ",   // Hex 1a
				"\\e",  // Hex 1b
				"  ",   // Hex 1c
				"  ",   // Hex 1d
				"  ",   // Hex 1e
				"  "    // Hex 1f
		};
		
		return C_ESCAPE[decimalByte];
	}
	
	static String teletypeNotation(int decimalByte)
	{
		final String[] TELETYPE_NOTATION =
		{
			"^@",   // Hex 00
			"^A",   // Hex 01 
			"^B",   // Hex 02 
			"^C",   // Hex 03
			"^D",   // Hex 04 
			"^E",   // Hex 05 
			"^F",   // Hex 06
			"^G",   // Hex 07
			"^H",   // Hex 08
			"^I",   // Hex 09
			"^J",   // Hex 0a
			"^K",   // Hex 0b
			"^L",   // Hex 0c
			"^M",   // Hex 0d
			"^N",   // Hex 0e
			"^O",   // Hex 0f
			"^P",   // Hex 10
			"^Q",   // Hex 11
			"^R",   // Hex 12
			"^S",   // Hex 13
			"^T",   // Hex 14
			"^U",   // Hex 15
			"^V",   // Hex 16
			"^W",   // Hex 17
			"^X",   // Hex 18
			"^Y",   // Hex 19
			"^Z",   // Hex 1a
			"^[",   // Hex 1b
			"^\\",  // Hex 1c
			"^]",   // Hex 1d
			"^^",   // Hex 1e
			"^_"    // Hex 1f
		};
		
		return TELETYPE_NOTATION[decimalByte];
	}
	
	static String characterName(int decimalByte)
	{
		final String[] CHARACTER_NAME =
		{
			"C:null",                        // Hex 00
			"C:start of heading",            // Hex 01 
			"C:start of text",               // Hex 02 
			"C:end of text",                 // Hex 03
			"C:end of transmission",         // Hex 04 
			"C:enquiry",                     // Hex 05 
			"C:acknowledgement",             // Hex 06
			"C:bell",                        // Hex 07
			"C:backspace",                   // Hex 08
			"C:horizontal tab",              // Hex 09
			"C:newline",                     // Hex 0a
			"C:vertical tab",                // Hex 0b
			"C:form feed",                   // Hex 0c
			"C:carriage return",             // Hex 0d
			"C:shift out",                   // Hex 0e
			"C:shift in",                    // Hex 0f
			"C:data link escape",            // Hex 10
			"C:device control 1",            // Hex 11
			"C:device control 2",            // Hex 12
			"C:device control 3",            // Hex 13
			"C:device control 4",            // Hex 14
			"C:negative acknowledgement",    // Hex 15
			"C:synchronous idle",            // Hex 16
			"C:end of transmission block",   // Hex 17
			"C:cancel",                      // Hex 18
			"C:end of medium",               // Hex 19
			"C:substitute",                  // Hex 1a
			"C:escape",                      // Hex 1b
			"C:file separator",              // Hex 1c
			"C:group separator",             // Hex 1d
			"C:record separator",            // Hex 1e
			"C:unit separator",              // Hex 1f
			"space",                         // Hex 20
			"",                              // Hex 21
			"",                              // Hex 22
			"",                              // Hex 23
			"",                              // Hex 24
			"",                              // Hex 25
			"",                              // Hex 26
			"",                              // Hex 27
			"",                              // Hex 28
			"",                              // Hex 29
			"",                              // Hex 2a
			"",                              // Hex 2b
			"",                              // Hex 2c
			"",                              // Hex 2d
			"",                              // Hex 2e
			"",                              // Hex 2f
			"",                              // Hex 30
			"",                              // Hex 31
			"",                              // Hex 32
			"",                              // Hex 33
			"",                              // Hex 34
			"",                              // Hex 35
			"",                              // Hex 36
			"",                              // Hex 37
			"",                              // Hex 38
			"",                              // Hex 39
			"",                              // Hex 3a
			"",                              // Hex 3b
			"",                              // Hex 3c
			"",                              // Hex 3d
			"",                              // Hex 3e
			"",                              // Hex 3f
			"",                              // Hex 40
			"",                              // Hex 41
			"",                              // Hex 42
			"",                              // Hex 43
			"",                              // Hex 44
			"",                              // Hex 45
			"",                              // Hex 46
			"",                              // Hex 47
			"",                              // Hex 48
			"",                              // Hex 49
			"",                              // Hex 4a
			"",                              // Hex 4b
			"",                              // Hex 4c
			"",                              // Hex 4d
			"",                              // Hex 4e
			"",                              // Hex 4f
			"",                              // Hex 50
			"",                              // Hex 51
			"",                              // Hex 52
			"",                              // Hex 53
			"",                              // Hex 54
			"",                              // Hex 55
			"",                              // Hex 56
			"",                              // Hex 57
			"",                              // Hex 58
			"",                              // Hex 59
			"",                              // Hex 5a
			"",                              // Hex 5b
			"",                              // Hex 5c
			"",                              // Hex 5d
			"",                              // Hex 5e
			"",                              // Hex 5f
			"",                              // Hex 60
			"",                              // Hex 61
			"",                              // Hex 62
			"",                              // Hex 63
			"",                              // Hex 64
			"",                              // Hex 65
			"",                              // Hex 66
			"",                              // Hex 67
			"",                              // Hex 68
			"",                              // Hex 69
			"",                              // Hex 6a
			"",                              // Hex 6b
			"",                              // Hex 6c
			"",                              // Hex 6d
			"",                              // Hex 6e
			"",                              // Hex 6f
			"",                              // Hex 70
			"",                              // Hex 71
			"",                              // Hex 72
			"",                              // Hex 73
			"",                              // Hex 74
			"",                              // Hex 75
			"",                              // Hex 76
			"",                              // Hex 77
			"",                              // Hex 78
			"",                              // Hex 79
			"",                              // Hex 7a
			"",                              // Hex 7b
			"",                              // Hex 7c
			"",                              // Hex 7d
			"",                              // Hex 7e
			"C: delete",                     // Hex 7f
			"W: Euro symbol",                // Hex 80
			"",                              // Hex 81
			"W: curved single open-quote",   // Hex 82
			"W: small f with hook",          // Hex 83
			"W: curved double open-quote",   // Hex 84
			"W: ellipsis",                   // Hex 85
			"W: dagger",                     // Hex 86
			"W: double dagger",              // Hex 87
			"W: circumflex",                 // Hex 88
			"W: permille",                   // Hex 89
			"W: capital S caron",            // Hex 8a
			"W: open single guillemet",      // Hex 8b
			"W: capital O+E",                // Hex 8c
			"",                              // Hex 8d
			"W: capital Z caron",            // Hex 8e
			"",                              // Hex 8f
			"",                              // Hex 90
			"W: curved single close quote",  // Hex 91
			"W: curved single open quote",   // Hex 92
			"W: curved double open quote",   // Hex 93
			"W: curved double close quote",  // Hex 94
			"W: bullet",                     // Hex 95
			"W: en-dash",                    // Hex 96
			"W: em-dash",                    // Hex 97
			"W: tilde",                      // Hex 98
			"W: trade mark",                 // Hex 99
			"W: small S caron",              // Hex 9a
			"W: close single guillemet",     // Hex 9b
			"W: small O+E",                  // Hex 9c
			"",                              // Hex 9d
			"W: small Z caron",              // Hex 9e
			"W: capital Y umlaut",           // Hex 9f
			"W+I: non-breaking space",       // Hex a0
			"W+I: inverted exclamation",     // Hex a1
			"W+I: cent",                     // Hex a2
			"W+I: UK pound sign",            // Hex a3
			"W+I: currency",                 // Hex a4
			"W+I: Yen sign",                 // Hex a5
			"W+I: broken bar",               // Hex a6
			"W+I: section",                  // Hex a7
			"W+I: trema",                    // Hex a8
			"W+I: copyright sign",           // Hex a9
			"W+I: feminine ordinal",         // Hex aa
			"W+I: open double guillemet",    // Hex ab
			"W+I: logical complement",       // Hex ac
			"W+I: soft hyphen",              // Hex ad
			"W+I: registered sign",          // Hex ae
			"W+I: macron",                   // Hex af
			"W+I: degree",                   // Hex b0
			"W+I: plus-or-minus sign",       // Hex b1
			"W+I: raise to power of 2",      // Hex b2
			"W+I: raise to power of 3",      // Hex b3
			"W+I: acute accent",             // Hex b4
			"W+I: Greek letter mu",          // Hex b5
			"W+I: pilcrow (paragraph)",      // Hex b6
			"W+I: middle dot",               // Hex b7
			"W+I: cedilla",                  // Hex b8
			"W+I: superscript 1",            // Hex b9
			"W+I: masculine ordinal",        // Hex ba
			"W+I: close double guillemet",   // Hex bb
			"W+I: one quarter",              // Hex bc
			"W+I: one half",                 // Hex bd
			"W+I: three quarters",           // Hex be
			"W+I: inverted question mark",   // Hex bf
			"W+I: capital A grave",          // Hex c0
			"W+I: capital A  acute",         // Hex c1
			"W+I: capital A circumflex",     // Hex c2
			"W+I: capital A tilde",          // Hex c3
			"W+I: capital A umlaut",         // Hex c4
			"W+I: capital A ring",           // Hex c5
			"W+I: capital ash A+E",          // Hex c6
			"W+I: capital C cedilla",        // Hex c7
			"W+I: capital E grave",          // Hex c8
			"W+I: capital E acute",          // Hex c9
			"W+I: capital E circumflex",     // Hex ca
			"W+I: capital E umlaut",         // Hex cb
			"W+I: capital I grave",          // Hex cc
			"W+I: capital I acute",          // Hex cd
			"W+I: capital I circumflex",     // Hex ce
			"W+I: capital I umlaut",         // Hex cf
			"W+I: capital D with bar ",      // Hex d0
			"W+I: capital N tilde",          // Hex d1
			"W+I: capital O grave",          // Hex d2
			"W+I: capital O acute",          // Hex d3
			"W+I: capital O circumflex",     // Hex d4
			"W+I: capital O tilde",          // Hex d5
			"W+I: capital O umlaut",         // Hex d6
			"W+I: multiplication sign",      // Hex d7
			"W+I: capital O with slash",     // Hex d8
			"W+I: capital U grave",          // Hex d9
			"W+I: capital U acute",          // Hex da
			"W+I: capital U circumflex",     // Hex db
			"W+I: capital u umlaut",         // Hex dc
			"W+I: capital Y acute",          // Hex dd
			"W+I: capital thorn",            // Hex de
			"W+I: capital eszett",           // Hex df
			"W+I: small a grave",            // Hex e0
			"W+I: small a acute",            // Hex e1
			"W+I: small a circumflex",       // Hex e2
			"W+I: small a tilde",            // Hex e3
			"W+I: small a umlaut",           // Hex e4
			"W+I: small a ring",             // Hex e5
			"W+I: small ash a+e",            // Hex e6
			"W+I: small c cedilla",          // Hex e7
			"W+I: small e grave",            // Hex e8
			"W+I: small e acute",            // Hex e9
			"W+I: small e circumflex",       // Hex ea
			"W+I: small e umlaut",           // Hex eb
			"W+I: small i grave",            // Hex ec
			"W+I: small i acute",            // Hex ed
			"W+I: small i circumflex",       // Hex ee
			"W+I: small i umlaut",           // Hex ef
			"W+I: small eth",                // Hex f0
			"W+I: small n tilde",            // Hex f1
			"W+I: small o grave",            // Hex f2
			"W+I: small o acute",            // Hex f3
			"W+I: small o circumflex",       // Hex f4
			"W+I: small o tilde",            // Hex f5
			"W+I: small o umlaut",           // Hex f6
			"W+I: division sign",            // Hex f7
			"W+I: small o with slash",       // Hex f8
			"W+I: small u grave",            // Hex f9
			"W+I: small u acute",            // Hex fa
			"W+I: small u circumflex",       // Hex fb
			"W+I: small u umlaut",           // Hex fc			
			"W+I: small y acute",            // Hex fd
			"W+I: small thorn",              // Hex fe
			"W+I: small y umlaut"            // Hex ff		
		};
		
		return CHARACTER_NAME[decimalByte];
	}

	static String utf8Group(int decimalByte)
	{
		final String[] UTF_8_DESCRIPTION =
		{
			"Control character, ASCII compatible",            // Hex 00
			"Control character, ASCII compatible",            // Hex 01 
			"Control character, ASCII compatible",            // Hex 02 
			"Control character, ASCII compatible",            // Hex 03
			"Control character, ASCII compatible",            // Hex 04 
			"Control character, ASCII compatible",            // Hex 05 
			"Control character, ASCII compatible",            // Hex 06
			"Control character, ASCII compatible",            // Hex 07
			"Control character, ASCII compatible",            // Hex 08
			"Control character, ASCII compatible",            // Hex 09
			"Control character, ASCII compatible",            // Hex 0a
			"Control character, ASCII compatible",            // Hex 0b
			"Control character, ASCII compatible",            // Hex 0c
			"Control character, ASCII compatible",            // Hex 0d
			"Control character, ASCII compatible",            // Hex 0e
			"Control character, ASCII compatible",            // Hex 0f
			"Control character, ASCII compatible",            // Hex 10
			"Control character, ASCII compatible",            // Hex 11
			"Control character, ASCII compatible",            // Hex 12
			"Control character, ASCII compatible",            // Hex 13
			"Control character, ASCII compatible",            // Hex 14
			"Control character, ASCII compatible",            // Hex 15
			"Control character, ASCII compatible",            // Hex 16
			"Control character, ASCII compatible",            // Hex 17
			"Control character, ASCII compatible",            // Hex 18
			"Control character, ASCII compatible",            // Hex 19
			"Control character, ASCII compatible",            // Hex 1a
			"Control character, ASCII compatible",            // Hex 1b
			"Control character, ASCII compatible",            // Hex 1c
			"Control character, ASCII compatible",            // Hex 1d
			"Control character, ASCII compatible",            // Hex 1e
			"Control character, ASCII compatible",            // Hex 1f
			"Punctuation and symbols, ASCII compatible",      // Hex 20
			"Punctuation and symbols, ASCII compatible",      // Hex 21
			"Punctuation and symbols, ASCII compatible",      // Hex 22
			"Punctuation and symbols, ASCII compatible",      // Hex 23
			"Punctuation and symbols, ASCII compatible",      // Hex 24
			"Punctuation and symbols, ASCII compatible",      // Hex 25
			"Punctuation and symbols, ASCII compatible",      // Hex 26
			"Punctuation and symbols, ASCII compatible",      // Hex 27
			"Punctuation and symbols, ASCII compatible",      // Hex 28
			"Punctuation and symbols, ASCII compatible",      // Hex 29
			"Punctuation and symbols, ASCII compatible",      // Hex 2a
			"Punctuation and symbols, ASCII compatible",      // Hex 2b
			"Punctuation and symbols, ASCII compatible",      // Hex 2c
			"Punctuation and symbols, ASCII compatible",      // Hex 2d
			"Punctuation and symbols, ASCII compatible",      // Hex 2e
			"Punctuation and symbols, ASCII compatible",      // Hex 2f
			"Numeric digits, ASCII compatible",               // Hex 30
			"Numeric digits, ASCII compatible",               // Hex 31
			"Numeric digits, ASCII compatible",               // Hex 32
			"Numeric digits, ASCII compatible",               // Hex 33
			"Numeric digits, ASCII compatible",               // Hex 34
			"Numeric digits, ASCII compatible",               // Hex 35
			"Numeric digits, ASCII compatible",               // Hex 36
			"Numeric digits, ASCII compatible",               // Hex 37
			"Numeric digits, ASCII compatible",               // Hex 38
			"Numeric digits, ASCII compatible",               // Hex 39
			"Punctuation and symbols, ASCII compatible",      // Hex 3a
			"Punctuation and symbols, ASCII compatible",      // Hex 3b
			"Punctuation and symbols, ASCII compatible",      // Hex 3c
			"Punctuation and symbols, ASCII compatible",      // Hex 3d
			"Punctuation and symbols, ASCII compatible",      // Hex 3e
			"Punctuation and symbols, ASCII compatible",      // Hex 3f
			"Punctuation and symbols, ASCII compatible",      // Hex 40
			"English alphabet, ASCII compatible",             // Hex 41
			"English alphabet, ASCII compatible",             // Hex 42
			"English alphabet, ASCII compatible",             // Hex 43
			"English alphabet, ASCII compatible",             // Hex 44
			"English alphabet, ASCII compatible",             // Hex 45
			"English alphabet, ASCII compatible",             // Hex 46
			"English alphabet, ASCII compatible",             // Hex 47
			"English alphabet, ASCII compatible",             // Hex 48
			"English alphabet, ASCII compatible",             // Hex 49
			"English alphabet, ASCII compatible",             // Hex 4a
			"English alphabet, ASCII compatible",             // Hex 4b
			"English alphabet, ASCII compatible",             // Hex 4c
			"English alphabet, ASCII compatible",             // Hex 4d
			"English alphabet, ASCII compatible",             // Hex 4e
			"English alphabet, ASCII compatible",             // Hex 4f
			"English alphabet, ASCII compatible",             // Hex 50
			"English alphabet, ASCII compatible",             // Hex 51
			"English alphabet, ASCII compatible",             // Hex 52
			"English alphabet, ASCII compatible",             // Hex 53
			"English alphabet, ASCII compatible",             // Hex 54
			"English alphabet, ASCII compatible",             // Hex 55
			"English alphabet, ASCII compatible",             // Hex 56
			"English alphabet, ASCII compatible",             // Hex 57
			"English alphabet, ASCII compatible",             // Hex 58
			"English alphabet, ASCII compatible",             // Hex 59
			"English alphabet, ASCII compatible",             // Hex 5a
			"Punctuation and symbols, ASCII compatible",      // Hex 5b
			"Punctuation and symbols, ASCII compatible",      // Hex 5c
			"Punctuation and symbols, ASCII compatible",      // Hex 5d
			"Punctuation and symbols, ASCII compatible",      // Hex 5e
			"Punctuation and symbols, ASCII compatible",      // Hex 5f
			"Punctuation and symbols, ASCII compatible",      // Hex 60
			"English alphabet, ASCII compatible",             // Hex 61
			"English alphabet, ASCII compatible",             // Hex 62
			"English alphabet, ASCII compatible",             // Hex 63
			"English alphabet, ASCII compatible",             // Hex 64
			"English alphabet, ASCII compatible",             // Hex 65
			"English alphabet, ASCII compatible",             // Hex 66
			"English alphabet, ASCII compatible",             // Hex 67
			"English alphabet, ASCII compatible",             // Hex 68
			"English alphabet, ASCII compatible",             // Hex 69
			"English alphabet, ASCII compatible",             // Hex 6a
			"English alphabet, ASCII compatible",             // Hex 6b
			"English alphabet, ASCII compatible",             // Hex 6c
			"English alphabet, ASCII compatible",             // Hex 6d
			"English alphabet, ASCII compatible",             // Hex 6e
			"English alphabet, ASCII compatible",             // Hex 6f
			"English alphabet, ASCII compatible",             // Hex 70
			"English alphabet, ASCII compatible",             // Hex 71
			"English alphabet, ASCII compatible",             // Hex 72
			"English alphabet, ASCII compatible",             // Hex 73
			"English alphabet, ASCII compatible",             // Hex 74
			"English alphabet, ASCII compatible",             // Hex 75
			"English alphabet, ASCII compatible",             // Hex 76
			"English alphabet, ASCII compatible",             // Hex 77
			"English alphabet, ASCII compatible",             // Hex 78
			"English alphabet, ASCII compatible",             // Hex 79
			"English alphabet, ASCII compatible",             // Hex 7a
			"English alphabet, ASCII compatible",             // Hex 7b
			"English alphabet, ASCII compatible",             // Hex 7c
			"English alphabet, ASCII compatible",             // Hex 7d
			"English alphabet, ASCII compatible",             // Hex 7e
			"Control character, ASCII compatible",            // Hex 7f
			"Continuation byte",                              // Hex 80
			"Continuation byte",                              // Hex 81
			"Continuation byte",                              // Hex 82
			"Continuation byte",                              // Hex 83
			"Continuation byte",                              // Hex 84
			"Continuation byte",                              // Hex 85
			"Continuation byte",                              // Hex 86
			"Continuation byte",                              // Hex 87
			"Continuation byte",                              // Hex 88
			"Continuation byte",                              // Hex 89
			"Continuation byte",                              // Hex 8a
			"Continuation byte",                              // Hex 8b
			"Continuation byte",                              // Hex 8c
			"Continuation byte",                              // Hex 8d
			"Continuation byte",                              // Hex 8e
			"Continuation byte",                              // Hex 8f
			"Continuation byte",                              // Hex 90
			"Continuation byte",                              // Hex 91
			"Continuation byte",                              // Hex 92
			"Continuation byte",                              // Hex 93
			"Continuation byte",                              // Hex 94
			"Continuation byte",                              // Hex 95
			"Continuation byte",                              // Hex 96
			"Continuation byte",                              // Hex 97
			"Continuation byte",                              // Hex 98
			"Continuation byte",                              // Hex 99
			"Continuation byte",                              // Hex 9a
			"Continuation byte",                              // Hex 9b
			"Continuation byte",                              // Hex 9c
			"Continuation byte",                              // Hex 9d
			"Continuation byte",                              // Hex 9e
			"Continuation byte",                              // Hex 9f
			"Continuation byte",                              // Hex a0
			"Continuation byte",                              // Hex a1
			"Continuation byte",                              // Hex a2
			"Continuation byte",                              // Hex a3
			"Continuation byte",                              // Hex a4
			"Continuation byte",                              // Hex a5
			"Continuation byte",                              // Hex a6
			"Continuation byte",                              // Hex a7
			"Continuation byte",                              // Hex a8
			"Continuation byte",                              // Hex a9
			"Continuation byte",                              // Hex aa
			"Continuation byte",                              // Hex ab
			"Continuation byte",                              // Hex ac
			"Continuation byte",                              // Hex ad
			"Continuation byte",                              // Hex ae
			"Continuation byte",                              // Hex af
			"Continuation byte",                              // Hex b0
			"Continuation byte",                              // Hex b1
			"Continuation byte",                              // Hex b2
			"Continuation byte",                              // Hex b3
			"Continuation byte",                              // Hex b4
			"Continuation byte",                              // Hex b5
			"Continuation byte",                              // Hex b6
			"Continuation byte",                              // Hex b7
			"Continuation byte",                              // Hex b8
			"Continuation byte",                              // Hex b9
			"Continuation byte",                              // Hex ba
			"Continuation byte",                              // Hex bb
			"Continuation byte",                              // Hex bc
			"Continuation byte",                              // Hex bd
			"Continuation byte",                              // Hex be
			"Continuation byte",                              // Hex bf
			"Invalid in UTF-8",                               // Hex c0
			"Invalid in UTF-8",                               // Hex c1
			"Leading Byte(2), Latin",                            // Hex c2
			"Leading Byte(2), Latin",                            // Hex c3
			"Leading Byte(2), Latin",                            // Hex c4
			"Leading Byte(2), Latin",                            // Hex c5
			"Leading Byte(2), Latin",                            // Hex c6
			"Leading Byte(2), Latin",                            // Hex c7
			"Leading Byte(2), Latin",                            // Hex c8
			"Leading Byte(2), International Phonetic Alphabet",  // Hex c9
			"Leading Byte(2), International Phonetic Alphabet",  // Hex ca
			"Leading Byte(2), International Phonetic Alphabet",  // Hex cb
			"Leading Byte(2), accents",                          // Hex cc
			"Leading Byte(2), accents",                          // Hex cd
			"Leading Byte(2), Greek",                            // Hex ce
			"Leading Byte(2), Greek",                            // Hex cf
			"Leading Byte(2), Cyrillic",                         // Hex d0
			"Leading Byte(2), Cyrillic",                         // Hex d1
			"Leading Byte(2), Cyrillic",                         // Hex d2
			"Leading Byte(2), Cyrillic",                         // Hex d3
			"Leading Byte(2), Cyrillic",                         // Hex d4
			"Leading Byte(2), Armenian",                         // Hex d5
			"Leading Byte(2), Hebrew",                           // Hex d6
			"Leading Byte(2), Hebrew",                           // Hex d7
			"Leading Byte(2), Arabic",                           // Hex d8
			"Leading Byte(2), Arabic",                           // Hex d9
			"Leading Byte(2), Arabic",                           // Hex da
			"Leading Byte(2), Arabic",                           // Hex db
			"Leading Byte(2), Syriac",                           // Hex dc
			"Leading Byte(2), Arabic",                           // Hex dd
			"Leading Byte(2), Thaana",                           // Hex de
			"Leading Byte(2), N'Ko",                             // Hex df
			"Leading Byte(3), Indic",                            // Hex e0
			"Leading Byte(3), Miscellaneous",                    // Hex e1
			"Leading Byte(3), Symbol",                           // Hex e2
			"Leading Byte(3), Kana & Chinese/Japanese/Korean",   // Hex e3
			"Leading Byte(3), Chinese/Japanese/Korean unified",  // Hex e4
			"Leading Byte(3), Chinese/Japanese/Korean unified",  // Hex e5
			"Leading Byte(3), Chinese/Japanese/Korean unified",  // Hex e6
			"Leading Byte(3), Chinese/Japanese/Korean unified",  // Hex e7
			"Leading Byte(3), Chinese/Japanese/Korean unified",  // Hex e8
			"Leading Byte(3), Chinese/Japanese/Korean unified",  // Hex e9
			"Leading Byte(3), Asian",                            // Hex ea
			"Leading Byte(3), Hangul",                           // Hex eb
			"Leading Byte(3), Hangul",                           // Hex ec
			"Leading Byte(3), Hangul",                           // Hex ed
			"Leading Byte(3), Private Use Areas",                // Hex ee
			"Leading Byte(3), Forms",                            // Hex ef
			"Leading Byte(4), Supplementary Planes",             // Hex f0
			"Leading Byte(4)",                                   // Hex f1
			"Leading Byte(4)",                                   // Hex f2
			"Leading Byte(4), Supplementary Planes",             // Hex f3
			"Leading Byte(4), Supplementary Planes",             // Hex f4
			"Invalid in UTF-8",                               // Hex f5
			"Invalid in UTF-8",                               // Hex f6
			"Invalid in UTF-8",                               // Hex f7
			"Invalid in UTF-8",                               // Hex f8
			"Invalid in UTF-8",                               // Hex f9
			"Invalid in UTF-8",                               // Hex fa
			"Invalid in UTF-8",                               // Hex fb
			"Invalid in UTF-8",                               // Hex fc
			"Invalid in UTF-8",                               // Hex fd
			"Invalid in UTF-8",                               // Hex fe
			"Invalid in UTF-8"                                // Hex ff		
		};
		
		return UTF_8_DESCRIPTION[decimalByte];
	}

	
	static String utf8Description(int decimalByte)
	{
		final String[] UTF_8_DESCRIPTION =
		{
			"Control character ^@ \\0 Null",                        // Hex 00
			"Control character ^A start of heading",                // Hex 01 
			"Control character ^B start of text",                   // Hex 02 
			"Control character ^C end of text",                     // Hex 03
			"Control character ^D end of transmission",             // Hex 04 
			"Control character ^E enquiry",                         // Hex 05 
			"Control character ^F acknowledgement",                 // Hex 06
			"Control character ^G \\a bell",                        // Hex 07
			"Control character ^H \\b backspace",                   // Hex 08
			"Control character ^I \\t horizontal tab",              // Hex 09
			"Control character ^J \\n newline",                     // Hex 0a
			"Control character ^K \\v vertical tab",                // Hex 0b
			"Control character ^L \\f form feed",                   // Hex 0c
			"Control character ^M \\r carriage return",             // Hex 0d
			"Control character ^N shift out",                       // Hex 0e
			"Control character ^O shift in",                        // Hex 0f
			"Control character ^P data link escape",                // Hex 10
			"Control character ^Q device control 1",                // Hex 11
			"Control character ^R device control 2",                // Hex 12
			"Control character ^S device control 3",                // Hex 13
			"Control character ^T device control 4",                // Hex 14
			"Control character ^U negative acknowledgement",        // Hex 15
			"Control character ^V synchronous idle",                // Hex 16
			"Control character ^W end of transmission block",       // Hex 17
			"Control character ^X Cancel",                          // Hex 18
			"Control character ^Y end of medium",                   // Hex 19
			"Control character ^Z Substitute",                      // Hex 1a
			"Control character ^[ \\e escape",                      // Hex 1b
			"Control character ^\\ file separator",                 // Hex 1c
			"Control character ^] group separator",                 // Hex 1d
			"Control character ^^ record separator",                // Hex 1e
			"Control character ^_ unit separator",                  // Hex 1f
			"Space",                                                // Hex 20
			"!",                                                    // Hex 21
			"\"",                                                   // Hex 22
			"#",                                                    // Hex 23
			"$",                                                    // Hex 24
			"%",                                                    // Hex 25
			"&",                                                    // Hex 26
			"'",                                                    // Hex 27
			"(",                                                    // Hex 28
			")",                                                    // Hex 29
			"*",                                                    // Hex 2a
			"+",                                                    // Hex 2b
			",",                                                    // Hex 2c
			"-",                                                    // Hex 2d
			".",                                                    // Hex 2e
			"/",                                                    // Hex 2f
			"0",                                                    // Hex 30
			"1",                                                    // Hex 31
			"2",                                                    // Hex 32
			"3",                                                    // Hex 33
			"4",                                                    // Hex 34
			"5",                                                    // Hex 35
			"6",                                                    // Hex 36
			"7",                                                    // Hex 37
			"8",                                                    // Hex 38
			"9",                                                    // Hex 39
			":",                                                    // Hex 3a
			";",                                                    // Hex 3b
			"<",                                                    // Hex 3c
			"=",                                                    // Hex 3d
			">",                                                    // Hex 3e
			"?",                                                    // Hex 3f
			"@",                                                    // Hex 40
			"A",                                                    // Hex 41
			"B",                                                    // Hex 42
			"C",                                                    // Hex 43
			"D",                                                    // Hex 44
			"E",                                                    // Hex 45
			"F",                                                    // Hex 46
			"G",                                                    // Hex 47
			"H",                                                    // Hex 48
			"I",                                                    // Hex 49
			"J",                                                    // Hex 4a
			"K",                                                    // Hex 4b
			"L",                                                    // Hex 4c
			"M",                                                    // Hex 4d
			"N",                                                    // Hex 4e
			"O",                                                    // Hex 4f
			"P",                                                    // Hex 50
			"Q",                                                    // Hex 51
			"R",                                                    // Hex 52
			"S",                                                    // Hex 53
			"T",                                                    // Hex 54
			"U",                                                    // Hex 55
			"V",                                                    // Hex 56
			"W",                                                    // Hex 57
			"X",                                                    // Hex 58
			"Y",                                                    // Hex 59
			"Z",                                                    // Hex 5a
			"[",                                                    // Hex 5b
			"\\",                                                   // Hex 5c
			"]",                                                    // Hex 5d
			"^",                                                    // Hex 5e
			"_",                                                    // Hex 5f
			"`",                                                    // Hex 60
			"a",                                                    // Hex 61
			"b",                                                    // Hex 62
			"c",                                                    // Hex 63
			"d",                                                    // Hex 64
			"e",                                                    // Hex 65
			"f",                                                    // Hex 66
			"g",                                                    // Hex 67
			"h",                                                    // Hex 68
			"i",                                                    // Hex 69
			"j",                                                    // Hex 6a
			"k",                                                    // Hex 6b
			"l",                                                    // Hex 6c
			"m",                                                    // Hex 6d
			"n",                                                    // Hex 6e
			"o",                                                    // Hex 6f
			"p",                                                    // Hex 70
			"q",                                                    // Hex 71
			"r",                                                    // Hex 72
			"s",                                                    // Hex 73
			"t",                                                    // Hex 74
			"u",                                                    // Hex 75
			"v",                                                    // Hex 76
			"w",                                                    // Hex 77
			"x",                                                    // Hex 78
			"y",                                                    // Hex 79
			"z",                                                    // Hex 7a
			"{",                                                    // Hex 7b
			"|",                                                    // Hex 7c
			"}",                                                    // Hex 7d
			"~",                                                    // Hex 7e
			"Control character ^? delete",                          // Hex 7f
			"UTF-8 Continuation byte",                              // Hex 80
			"UTF-8 Continuation byte",                              // Hex 81
			"UTF-8 Continuation byte",                              // Hex 82
			"UTF-8 Continuation byte",                              // Hex 83
			"UTF-8 Continuation byte",                              // Hex 84
			"UTF-8 Continuation byte",                              // Hex 85
			"UTF-8 Continuation byte",                              // Hex 86
			"UTF-8 Continuation byte",                              // Hex 87
			"UTF-8 Continuation byte",                              // Hex 88
			"UTF-8 Continuation byte",                              // Hex 89
			"UTF-8 Continuation byte",                              // Hex 8a
			"UTF-8 Continuation byte",                              // Hex 8b
			"UTF-8 Continuation byte",                              // Hex 8c
			"UTF-8 Continuation byte",                              // Hex 8d
			"UTF-8 Continuation byte",                              // Hex 8e
			"UTF-8 Continuation byte",                              // Hex 8f
			"UTF-8 Continuation byte",                              // Hex 90
			"UTF-8 Continuation byte",                              // Hex 91
			"UTF-8 Continuation byte",                              // Hex 92
			"UTF-8 Continuation byte",                              // Hex 93
			"UTF-8 Continuation byte",                              // Hex 94
			"UTF-8 Continuation byte",                              // Hex 95
			"UTF-8 Continuation byte",                              // Hex 96
			"UTF-8 Continuation byte",                              // Hex 97
			"UTF-8 Continuation byte",                              // Hex 98
			"UTF-8 Continuation byte",                              // Hex 99
			"UTF-8 Continuation byte",                              // Hex 9a
			"UTF-8 Continuation byte",                              // Hex 9b
			"UTF-8 Continuation byte",                              // Hex 9c
			"UTF-8 Continuation byte",                              // Hex 9d
			"UTF-8 Continuation byte",                              // Hex 9e
			"UTF-8 Continuation byte",                              // Hex 9f
			"UTF-8 Continuation byte",                              // Hex a0
			"UTF-8 Continuation byte",                              // Hex a1
			"UTF-8 Continuation byte",                              // Hex a2
			"UTF-8 Continuation byte",                              // Hex a3
			"UTF-8 Continuation byte",                              // Hex a4
			"UTF-8 Continuation byte",                              // Hex a5
			"UTF-8 Continuation byte",                              // Hex a6
			"UTF-8 Continuation byte",                              // Hex a7
			"UTF-8 Continuation byte",                              // Hex a8
			"UTF-8 Continuation byte",                              // Hex a9
			"UTF-8 Continuation byte",                              // Hex aa
			"UTF-8 Continuation byte",                              // Hex ab
			"UTF-8 Continuation byte",                              // Hex ac
			"UTF-8 Continuation byte",                              // Hex ad
			"UTF-8 Continuation byte",                              // Hex ae
			"UTF-8 Continuation byte",                              // Hex af
			"UTF-8 Continuation byte",                              // Hex b0
			"UTF-8 Continuation byte",                              // Hex b1
			"UTF-8 Continuation byte",                              // Hex b2
			"UTF-8 Continuation byte",                              // Hex b3
			"UTF-8 Continuation byte",                              // Hex b4
			"UTF-8 Continuation byte",                              // Hex b5
			"UTF-8 Continuation byte",                              // Hex b6
			"UTF-8 Continuation byte",                              // Hex b7
			"UTF-8 Continuation byte",                              // Hex b8
			"UTF-8 Continuation byte",                              // Hex b9
			"UTF-8 Continuation byte",                              // Hex ba
			"UTF-8 Continuation byte",                              // Hex bb
			"UTF-8 Continuation byte",                              // Hex bc
			"UTF-8 Continuation byte",                              // Hex bd
			"UTF-8 Continuation byte",                              // Hex be
			"UTF-8 Continuation byte",                              // Hex bf
			"Invalid in UTF-8",                                     // Hex c0
			"Invalid in UTF-8",                                     // Hex c1
			"UTF-8 Leading Byte, Latin",                            // Hex c2
			"UTF-8 Leading Byte, Latin",                            // Hex c3
			"UTF-8 Leading Byte, Latin",                            // Hex c4
			"UTF-8 Leading Byte, Latin",                            // Hex c5
			"UTF-8 Leading Byte, Latin",                            // Hex c6
			"UTF-8 Leading Byte, Latin",                            // Hex c7
			"UTF-8 Leading Byte, Latin",                            // Hex c8
			"UTF-8 Leading Byte, International Phonetic Alphabet",  // Hex c9
			"UTF-8 Leading Byte, International Phonetic Alphabet",  // Hex ca
			"UTF-8 Leading Byte, International Phonetic Alphabet",  // Hex cb
			"UTF-8 Leading Byte, accents",                          // Hex cc
			"UTF-8 Leading Byte, accents",                          // Hex cd
			"UTF-8 Leading Byte, Greek",                            // Hex ce
			"UTF-8 Leading Byte, Greek",                            // Hex cf
			"UTF-8 Leading Byte, Cyrillic",                         // Hex d0
			"UTF-8 Leading Byte, Cyrillic",                         // Hex d1
			"UTF-8 Leading Byte, Cyrillic",                         // Hex d2
			"UTF-8 Leading Byte, Cyrillic",                         // Hex d3
			"UTF-8 Leading Byte, Cyrillic",                         // Hex d4
			"UTF-8 Leading Byte, Armenian",                         // Hex d5
			"UTF-8 Leading Byte, Hebrew",                           // Hex d6
			"UTF-8 Leading Byte, Hebrew",                           // Hex d7
			"UTF-8 Leading Byte, Arabic",                           // Hex d8
			"UTF-8 Leading Byte, Arabic",                           // Hex d9
			"UTF-8 Leading Byte, Arabic",                           // Hex da
			"UTF-8 Leading Byte, Arabic",                           // Hex db
			"UTF-8 Leading Byte, Syriac",                           // Hex dc
			"UTF-8 Leading Byte, Arabic",                           // Hex dd
			"UTF-8 Leading Byte, Thaana",                           // Hex de
			"UTF-8 Leading Byte, N'Ko",                             // Hex df
			"UTF-8 Leading Byte, Indic",                            // Hex e0
			"UTF-8 Leading Byte, Miscellaneous",                    // Hex e1
			"UTF-8 Leading Byte, Symbol",                           // Hex e2
			"UTF-8 Leading Byte, Kana & Chinese/Japanese/Korean",   // Hex e3
			"UTF-8 Leading Byte, Chinese/Japanese/Korean unified",  // Hex e4
			"UTF-8 Leading Byte, Chinese/Japanese/Korean unified",  // Hex e5
			"UTF-8 Leading Byte, Chinese/Japanese/Korean unified",  // Hex e6
			"UTF-8 Leading Byte, Chinese/Japanese/Korean unified",  // Hex e7
			"UTF-8 Leading Byte, Chinese/Japanese/Korean unified",  // Hex e8
			"UTF-8 Leading Byte, Chinese/Japanese/Korean unified",  // Hex e9
			"UTF-8 Leading Byte, Asian",                            // Hex ea
			"UTF-8 Leading Byte, Hangul",                           // Hex eb
			"UTF-8 Leading Byte, Hangul",                           // Hex ec
			"UTF-8 Leading Byte, Hangul",                           // Hex ed
			"UTF-8 Leading Byte, Private Use Areas",                // Hex ee
			"UTF-8 Leading Byte, Forms",                            // Hex ef
			"UTF-8 Leading Byte, Supplementary Planes",             // Hex f0
			"UTF-8 Leading Byte",                                   // Hex f1
			"UTF-8 Leading Byte",                                   // Hex f2
			"UTF-8 Leading Byte, Supplementary Planes",             // Hex f3
			"UTF-8 Leading Byte, Supplementary Planes",             // Hex f4
			"Invalid in UTF-8",                                     // Hex f5
			"Invalid in UTF-8",                                     // Hex f6
			"Invalid in UTF-8",                                     // Hex f7
			"Invalid in UTF-8",                                     // Hex f8
			"Invalid in UTF-8",                                     // Hex f9
			"Invalid in UTF-8",                                     // Hex fa
			"Invalid in UTF-8",                                     // Hex fb
			"Invalid in UTF-8",                                     // Hex fc
			"Invalid in UTF-8",                                     // Hex fd
			"Invalid in UTF-8",                                     // Hex fe
			"Invalid in UTF-8"                                      // Hex ff		
		};
		
		return UTF_8_DESCRIPTION[decimalByte];
	}
	
	
	static String windows1252Description(int decimalByte)
	{
		final String[] WINDOWS_1252_DESCRIPTION =
		{
				"Control character ^@ \\0 Null",                   // Hex 00
				"Control character ^A start of heading",           // Hex 01 
				"Control character ^B start of text",              // Hex 02 
				"Control character ^C end of text",                // Hex 03
				"Control character ^D end of transmission",        // Hex 04 
				"Control character ^E enquiry",                    // Hex 05 
				"Control character ^F acknowledgement",            // Hex 06
				"Control character ^G \\a bell",                   // Hex 07
				"Control character ^H \\b backspace",              // Hex 08
				"Control character ^I \\t horizontal tab",         // Hex 09
				"Control character ^J \\n newline",                // Hex 0a
				"Control character ^K \\v vertical tab",           // Hex 0b
				"Control character ^L \\f form feed",              // Hex 0c
				"Control character ^M \\r carriage return",        // Hex 0d
				"Control character ^N shift out",                  // Hex 0e
				"Control character ^O shift in",                   // Hex 0f
				"Control character ^P data link escape",           // Hex 10
				"Control character ^Q device control 1",           // Hex 11
				"Control character ^R device control 2",           // Hex 12
				"Control character ^S device control 3",           // Hex 13
				"Control character ^T device control 4",           // Hex 14
				"Control character ^U negative acknowledgement",   // Hex 15
				"Control character ^V synchronous idle",           // Hex 16
				"Control character ^W end of transmission block",  // Hex 17
				"Control character ^X Cancel",                     // Hex 18
				"Control character ^Y end of medium",              // Hex 19
				"Control character ^Z Substitute",                 // Hex 1a
				"Control character ^[ \\e escape",                 // Hex 1b
				"Control character ^\\ file separator",            // Hex 1c
				"Control character ^] group separator",            // Hex 1d
				"Control character ^^ record separator",           // Hex 1e
				"Control character ^_ unit separator",             // Hex 1f
				"Space",                                           // Hex 20
				"!",                                               // Hex 21
				"\"",                                              // Hex 22
				"#",                                               // Hex 23
				"$",                                               // Hex 24
				"%",                                               // Hex 25
				"&",                                               // Hex 26
				"'",                                               // Hex 27
				"(",                                               // Hex 28
				")",                                               // Hex 29
				"*",                                               // Hex 2a
				"+",                                               // Hex 2b
				",",                                               // Hex 2c
				"-",                                               // Hex 2d
				".",                                               // Hex 2e
				"/",                                               // Hex 2f
				"0",                                               // Hex 30
				"1",                                               // Hex 31
				"2",                                               // Hex 32
				"3",                                               // Hex 33
				"4",                                               // Hex 34
				"5",                                               // Hex 35
				"6",                                               // Hex 36
				"7",                                               // Hex 37
				"8",                                               // Hex 38
				"9",                                               // Hex 39
				":",                                               // Hex 3a
				";",                                               // Hex 3b
				"<",                                               // Hex 3c
				"=",                                               // Hex 3d
				">",                                               // Hex 3e
				"?",                                               // Hex 3f
				"@",                                               // Hex 40
				"A",                                               // Hex 41
				"B",                                               // Hex 42
				"C",                                               // Hex 43
				"D",                                               // Hex 44
				"E",                                               // Hex 45
				"F",                                               // Hex 46
				"G",                                               // Hex 47
				"H",                                               // Hex 48
				"I",                                               // Hex 49
				"J",                                               // Hex 4a
				"K",                                               // Hex 4b
				"L",                                               // Hex 4c
				"M",                                               // Hex 4d
				"N",                                               // Hex 4e
				"O",                                               // Hex 4f
				"P",                                               // Hex 50
				"Q",                                               // Hex 51
				"R",                                               // Hex 52
				"S",                                               // Hex 53
				"T",                                               // Hex 54
				"U",                                               // Hex 55
				"V",                                               // Hex 56
				"W",                                               // Hex 57
				"X",                                               // Hex 58
				"Y",                                               // Hex 59
				"Z",                                               // Hex 5a
				"[",                                               // Hex 5b
				"\\",                                              // Hex 5c
				"]",                                               // Hex 5d
				"^",                                               // Hex 5e
				"_",                                               // Hex 5f
				"`",                                               // Hex 60
				"a",                                               // Hex 61
				"b",                                               // Hex 62
				"c",                                               // Hex 63
				"d",                                               // Hex 64
				"e",                                               // Hex 65
				"f",                                               // Hex 66
				"g",                                               // Hex 67
				"h",                                               // Hex 68
				"i",                                               // Hex 69
				"j",                                               // Hex 6a
				"k",                                               // Hex 6b
				"l",                                               // Hex 6c
				"m",                                               // Hex 6d
				"n",                                               // Hex 6e
				"o",                                               // Hex 6f
				"p",                                               // Hex 70
				"q",                                               // Hex 71
				"r",                                               // Hex 72
				"s",                                               // Hex 73
				"t",                                               // Hex 74
				"u",                                               // Hex 75
				"v",                                               // Hex 76
				"w",                                               // Hex 77
				"x",                                               // Hex 78
				"y",                                               // Hex 79
				"z",                                               // Hex 7a
				"{",                                               // Hex 7b
				"|",                                               // Hex 7c
				"}",                                               // Hex 7d
				"~",                                               // Hex 7e
				"Control character ^? delete",                     // Hex 7f
				"Windows-1252 Euro symbol",                        // Hex 80
				"Windows-1252 Undefined",                          // Hex 81
				"Windows-1252 Curved single open-quote",           // Hex 82
				"Windows-1252 Lower case f with hook",             // Hex 83
				"Windows-1252 Curved double open-quote",           // Hex 84
				"Windows-1252 Ellipsis",                           // Hex 85
				"Windows-1252 Dagger",                             // Hex 86
				"Windows-1252 Double dagger",                      // Hex 87
				"Windows-1252 Circumflex",                         // Hex 88
				"Windows-1252 Permille",                           // Hex 89
				"Windows-1252 Uppercase S with breve accent",      // Hex 8a
				"Windows-1252 Open single guillemet",              // Hex 8b
				"Windows-1252 Uppercase ligature of O and E",      // Hex 8c
				"Windows-1252 Undefined",                          // Hex 8d
				"Windows-1252 Uppercase Z with breve accent",      // Hex 8e
				"Windows-1252 Undefined",                          // Hex 8f
				"Windows-1252 Undefined",                          // Hex 90
				"Windows-1252 Curved single close-quote",          // Hex 91
				"Windows-1252 Curved single open-quote",           // Hex 92
				"Windows-1252 Curved double open-quote",           // Hex 93
				"Windows-1252 Curved double close-quote",          // Hex 94
				"Windows-1252 Bullet",                             // Hex 95
				"Windows-1252 En-dash",                            // Hex 96
				"Windows-1252 Em-dash",                            // Hex 97
				"Windows-1252 Tilde",                              // Hex 98
				"Windows-1252 Trade Mark",                         // Hex 99
				"Windows-1252 Lowercase S with breve accent",      // Hex 9a
				"Windows-1252 Close single guillemet",             // Hex 9b
				"Windows-1252 Lowercase ligature of O and E",      // Hex 9c
				"Windows-1252 Undefined",                          // Hex 9d
				"Windows-1252 Lowercase Z with breve accent",      // Hex 9e
				"Windows-1252 Uppercase Y with umlaut",            // Hex 9f
				"Windows-1252 No-break space",                     // Hex a0
				"Windows-1252 Inverted exclamation mark",          // Hex a1
				"Windows-1252 Cent (currency symbol)",             // Hex a2
				"Windows-1252 Pound (currency symbol)",            // Hex a3
				"Windows-1252 Generic currency symbol",            // Hex a4
				"Windows-1252 Yen (currency symbol)",              // Hex a5
				"Windows-1252 Broken vertical bar",                // Hex a6
				"Windows-1252 Section sign",                       // Hex a7
				"Windows-1252 Umlaut, alias Trema",                // Hex a8
				"Windows-1252 Copyright",                          // Hex a9
				"Windows-1252 Feminine ordinal indicator",         // Hex aa
				"Windows-1252 Open double guillemet",              // Hex ab
				"Windows-1252 Logical not",                        // Hex ac
				"Windows-1252 Soft hyphen",                        // Hex ad
				"Windows-1252 Registered trade-mark",              // Hex ae
				"Windows-1252 Macron",                             // Hex af
				"Windows-1252 Degree",                             // Hex b0
				"Windows-1252 Plus or minus",                      // Hex b1
				"Windows-1252 Superscript 2",                      // Hex b2
				"Windows-1252 Superscript 3",                      // Hex b3
				"Windows-1252 Acute accent",                       // Hex b4
				"Windows-1252 Micro",                              // Hex b5
				"Windows-1252 Pilcrow (paragraph sign)",           // Hex b6
				"Windows-1252 Interpunct",                         // Hex b7
				"Windows-1252 Cedilla",                            // Hex b8
				"Windows-1252 Superscript 1",                      // Hex b9
				"Windows-1252 Masculine ordinal indicator",        // Hex ba
				"Windows-1252 Close double guillemet",             // Hex bb
				"Windows-1252 One quarter",                        // Hex bc
				"Windows-1252 One half",                           // Hex bd
				"Windows-1252 Three quarters",                     // Hex be
				"Windows-1252 Inverted question mark",             // Hex bf
				"Windows-1252 Uppercase A grave",                  // Hex c0
				"Windows-1252 Uppercase A acute",                  // Hex c1
				"Windows-1252 Uppercase A circumflex",             // Hex c2
				"Windows-1252 Uppercase A tilde",                  // Hex c3
				"Windows-1252 Uppercase A umlaut",                 // Hex c4
				"Windows-1252 Uppercase A ring",                   // Hex c5
				"Windows-1252 Uppercase ligature of A and E",      // Hex c6
				"Windows-1252 Uppercase C cedilla",                // Hex c7
				"Windows-1252 Uppercase E grave",                  // Hex c8
				"Windows-1252 Uppercase E acute",                  // Hex c9
				"Windows-1252 Uppercase E circumflex",             // Hex ca
				"Windows-1252 Uppercase E umlaut",                 // Hex cb
				"Windows-1252 Uppercase I grave",                  // Hex cc
				"Windows-1252 Uppercase I acute",                  // Hex cd
				"Windows-1252 Uppercase I circumflex",             // Hex ce
				"Windows-1252 Uppercase I umlaut",                 // Hex cf
				"Windows-1252 Uppercase eth",                      // Hex d0
				"Windows-1252 Uppercase N tilde",                  // Hex d1
				"Windows-1252 Uppercase O grave",                  // Hex d2
				"Windows-1252 Uppercase O acute",                  // Hex d3
				"Windows-1252 Uppercase O circumflex",             // Hex d4
				"Windows-1252 Uppercase O tilde",                  // Hex d5
				"Windows-1252 Uppercase O umlaut",                 // Hex d6
				"Windows-1252 Multiplication sign",                // Hex d7
				"Windows-1252 Slashed O",                          // Hex d8
				"Windows-1252 Uppercase U grave",                  // Hex d9
				"Windows-1252 Uppercase U acute",                  // Hex da
				"Windows-1252 Uppercase U circumflex",             // Hex db
				"Windows-1252 Uppercase U umlaut",                 // Hex dc
				"Windows-1252 Uppercase Y acute",                  // Hex dd
				"Windows-1252 Thorn",                              // Hex de
				"Windows-1252 Eszett",                             // Hex df
				"Windows-1252 Lowercase A grave",                  // Hex e0
				"Windows-1252 Lowercase A acute",                  // Hex e1
				"Windows-1252 Lowercase A circumflex",             // Hex e2
				"Windows-1252 Lowercase A tilde",                  // Hex e3
				"Windows-1252 Lowercase A umlaut",                 // Hex e4
				"Windows-1252 Lowercase A ring",                   // Hex e5
				"Windows-1252 Lowercase ligature of A and E",      // Hex e6
				"Windows-1252 Lowercase C cedilla",                // Hex e7
				"Windows-1252 Lowercase E grave",                  // Hex e8
				"Windows-1252 Lowercase E acute",                  // Hex e9
				"Windows-1252 Lowercase E circumflex",             // Hex ea
				"Windows-1252 Lowercase E umlaut",                 // Hex eb
				"Windows-1252 Lowercase I grave",                  // Hex ec
				"Windows-1252 Lowercase I acute",                  // Hex ed
				"Windows-1252 Lowercase I circumflex",             // Hex ee
				"Windows-1252 Lowercase I umlaut",                 // Hex ef
				"Windows-1252 Lowercase eth",                      // Hex f0
				"Windows-1252 Lowercase N tilde",                  // Hex f1
				"Windows-1252 Lowercase O grave",                  // Hex f2
				"Windows-1252 Lowercase O acute",                  // Hex f3
				"Windows-1252 Lowercase O circumflex",             // Hex f4
				"Windows-1252 Lowercase O tilde",                  // Hex f5
				"Windows-1252 Lowercase O umlaut",                 // Hex f6
				"Windows-1252 Division sign",                      // Hex f7
				"Windows-1252 Slashed O",                          // Hex f8
				"Windows-1252 Lowercase U grave",                  // Hex f9
				"Windows-1252 Lowercase U acute",                  // Hex fa
				"Windows-1252 Lowercase U circumflex",             // Hex fb
				"Windows-1252 Lowercase U umlaut",                 // Hex fc
				"Windows-1252 Lowercase Y acute",                  // Hex fd
				"Windows-1252 Thorn",                              // Hex fe
				"Windows-1252 Lowercase Y umlaut"                  // Hex ff
		};
		
		return WINDOWS_1252_DESCRIPTION[decimalByte];
	}
}
