public static Encoding GetEncodingByName(string encoding, bool addBOM = true) { Encoding enc; if (string.IsNullOrEmpty(encoding)) { enc = new UTF8Encoding(addBOM); } else { switch (encoding.Trim().ToUpper()) { case "UTF-8": enc = new UTF8Encoding(addBOM); break; case "UTF-16": case "UTF-16LE": // предположительно, варианты UTF16_PlatformEndian\UTF16_OppositeEndian // зависят от платформы x86\m68k\SPARC. Пока нет понимания как корректно это обработать. // Сейчас сделано исходя из предположения что PlatformEndian должен быть LE поскольку // платформа x86 более широко распространена case "UTF16_PLATFORMENDIAN": enc = new UnicodeEncoding(false, addBOM); break; case "UTF-16BE": case "UTF16_OPPOSITEENDIAN": enc = new UnicodeEncoding(true, addBOM); break; case "UTF-32": case "UTF-32LE": case "UTF32_PLATFORMENDIAN": enc = new UTF32Encoding(false, addBOM); break; case "UTF-32BE": case "UTF32_OPPOSITEENDIAN": enc = new UTF32Encoding(true, addBOM); break; default: try { enc = Encoding.GetEncoding(encoding); break; } catch { throw RuntimeException.InvalidEncoding(encoding); } } } return(enc); }