Ejemplo n.º 1
0
        public static Encoding DetectEncoding(Stream stream, DetectOption flags)
        {
            Encoding encoding;
            IMultiLanguage2 o = new CMultiLanguageClass() as IMultiLanguage2;
            if (o == null)
            {
                byte[] buffer = new byte[4];
                int dataLength = stream.Read(buffer, 0, buffer.Length);
                return SimpleDetectEncoding(buffer, dataLength);
            }
            try
            {
                DetectEncodingInfo[] lpEncoding = new DetectEncodingInfo[1];
                int length = lpEncoding.Length;
                ComStream pstmIn = new ComStream(stream);
                int errorCode = o.DetectCodepageInIStream(((MLDETECTCP) flags) & MLDETECTCP.MLDETECTCP_MASK, 0, pstmIn, lpEncoding, ref length);
                switch (errorCode)
                {
                    case 0:
                    case 1:
                        if (length <= 0)
                        {
                            break;
                        }
                        return Encoding.GetEncoding((int) lpEncoding[0].nCodePage);

                    default:
                        throw Marshal.GetExceptionForHR(errorCode);
                }
                encoding = null;
            }
            finally
            {
                Marshal.FinalReleaseComObject(o);
            }
            return encoding;
        }