/// <summary> /// Decodes an object. /// </summary> /// <param name="ContentType">Internet Content Type.</param> /// <param name="Data">Encoded object.</param> /// <param name="BaseUri">Base URI, if any. If not available, value is null.</param> /// <returns>Decoded object.</returns> /// <exception cref="ArgumentException">If the object cannot be decoded.</exception> public static object Decode(string ContentType, byte[] Data, Uri BaseUri) { Encoding Encoding = null; KeyValuePair <string, string>[] Fields; int i; i = ContentType.IndexOf(';'); if (i > 0) { Fields = CommonTypes.ParseFieldValues(ContentType.Substring(i + 1).TrimStart()); ContentType = ContentType.Substring(0, i).TrimEnd(); foreach (KeyValuePair <string, string> Field in Fields) { if (Field.Key.ToUpper() == "CHARSET") { Encoding = GetEncoding(Field.Value); } } } else { Fields = new KeyValuePair <string, string> [0]; } return(Decode(ContentType, Data, Encoding, Fields, BaseUri)); }
/// <summary> /// Decodes an object. /// </summary> /// <param name="ContentType">Internet Content Type.</param> /// <param name="Data">Encoded object.</param> /// <param name="BaseUri">Base URI, if any. If not available, value is null.</param> /// <returns>Decoded object.</returns> /// <exception cref="ArgumentException">If the object cannot be decoded.</exception> public static object Decode(string ContentType, byte[] Data, Uri BaseUri) { Encoding Encoding = null; KeyValuePair <string, string>[] Fields; int i; i = ContentType.IndexOf(';'); if (i > 0) { Fields = CommonTypes.ParseFieldValues(ContentType.Substring(i + 1).TrimStart()); ContentType = ContentType.Substring(0, i).TrimEnd(); foreach (KeyValuePair <string, string> Field in Fields) { if (Field.Key.ToUpper() == "CHARSET") { // Reference: http://www.iana.org/assignments/character-sets/character-sets.xhtml switch (Field.Value.ToUpper()) { case "ASCII": case "US-ASCII": Encoding = Encoding.ASCII; break; case "UTF-16LE": case "UTF-16": Encoding = Encoding.Unicode; break; case "UTF-16BE": Encoding = Encoding.BigEndianUnicode; break; case "UTF-32": case "UTF-32LE": Encoding = Encoding.UTF32; break; case "UNICODE-1-1-UTF-7": case "UTF-7": Encoding = Encoding.UTF7; break; case "UTF-8": Encoding = Encoding.UTF8; break; default: Encoding = Encoding.GetEncoding(Field.Value); break; } } } } else { Fields = new KeyValuePair <string, string> [0]; } return(Decode(ContentType, Data, Encoding, Fields, BaseUri)); }