Пример #1
0
        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);
        }