Encoding

[Serializable]
public abstract class Encoding : ICloneable
{
    private static volatile Encoding defaultEncoding;
    private static volatile Encoding unicodeEncoding;
    private static volatile Encoding bigEndianUnicode;
#if FEATURE_UTF7        
    private static volatile Encoding utf7Encoding;
#endif
    private static volatile Encoding utf8Encoding;
#if FEATURE_UTF32        
    private static volatile Encoding utf32Encoding;
#endif
#if FEATURE_ASCII
    private static volatile Encoding asciiEncoding;
#endif

    protected Encoding()
        : this(0)
    {
    }


    [Pure]
    public static Encoding GetEncoding(String name)
    {
        Encoding baseEncoding = EncodingProvider.GetEncodingFromProvider(name);
        if (baseEncoding != null)
            return baseEncoding;

        return (GetEncoding(EncodingTable.GetCodePageFromName(name)));
    }



    public virtual String EncodingName
    {
        get
        {
            return (Environment.GetResourceString("Globalization.cp_" + m_codePage));
        }
    }


#if FEATURE_ASCII
 
public static Encoding ASCII
{
    get
    {
        if (asciiEncoding == null) asciiEncoding = new ASCIIEncoding();
        return asciiEncoding;
    }
}
#endif

    [Pure]
    public virtual byte[] GetBytes(char[] chars)
    {
        if (chars == null)
        {
            throw new ArgumentNullException("chars",
                Environment.GetResourceString("ArgumentNull_Array"));
        }
        Contract.EndContractBlock();
        return GetBytes(chars, 0, chars.Length);
    }

    [Pure]
    public virtual byte[] GetBytes(char[] chars, int index, int count)
    {
        byte[] result = new byte[GetByteCount(chars, index, count)];
        GetBytes(chars, index, count, result, 0);
        return result;
    }


    [Pure]
    public virtual char[] GetChars(byte[] bytes)
    {
        if (bytes == null)
        {
            throw new ArgumentNullException("bytes",
                Environment.GetResourceString("ArgumentNull_Array"));
        }
        Contract.EndContractBlock();
        return GetChars(bytes, 0, bytes.Length);
    }


    [Pure]
    public virtual char[] GetChars(byte[] bytes, int index, int count)
    {
        char[] result = new char[GetCharCount(bytes, index, count)];
        GetChars(bytes, index, count, result, 0);
        return result;
    }


    [System.Security.SecurityCritical]  // auto-generated
    [CLSCompliant(false)]
    [System.Runtime.InteropServices.ComVisible(false)]
    public unsafe string GetString(byte* bytes, int byteCount)
    {
        if (bytes == null)
            throw new ArgumentNullException("bytes", Environment.GetResourceString("ArgumentNull_Array"));

        if (byteCount < 0)
            throw new ArgumentOutOfRangeException("byteCount", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
        Contract.EndContractBlock();

        return String.CreateStringFromEncoding(bytes, byteCount, this);
    }



    public static Encoding Default
    {
        [System.Security.SecuritySafeCritical]  // auto-generated
        get
        {
            if (defaultEncoding == null)
            {
                defaultEncoding = CreateDefaultEncoding();
            }
            return defaultEncoding;
        }
    }



    [Pure]
    public virtual String GetString(byte[] bytes)
    {
        if (bytes == null)
            throw new ArgumentNullException("bytes",
                Environment.GetResourceString("ArgumentNull_Array"));
        Contract.EndContractBlock();

        return GetString(bytes, 0, bytes.Length);
    }

    [Pure]
    public virtual String GetString(byte[] bytes, int index, int count)
    {
        return new String(GetChars(bytes, index, count));
    }

    public static Encoding Unicode
    {
        get
        {
            if (unicodeEncoding == null) unicodeEncoding = new UnicodeEncoding(false, true);
            return unicodeEncoding;
        }
    }

    public static Encoding BigEndianUnicode
    {
        get
        {
            if (bigEndianUnicode == null) bigEndianUnicode = new UnicodeEncoding(true, true);
            return bigEndianUnicode;
        }
    }

#if FEATURE_UTF7

public static Encoding UTF7 {
    get {
        if (utf7Encoding == null) utf7Encoding = new UTF7Encoding();
        return utf7Encoding;
    }
}

#endif


    public static Encoding UTF8
    {
        get
        {
            if (utf8Encoding == null) utf8Encoding = new UTF8Encoding(true);
            return utf8Encoding;
        }
    }

#if FEATURE_UTF32
public static Encoding UTF32 {
    get {
        if (utf32Encoding == null) utf32Encoding = new UTF32Encoding(false, true);
        return utf32Encoding;
    }
}
#endif

}

 

posted @ 2016-11-29 23:20  茗::流  阅读(367)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。