Exemplo n.º 1
0
        internal static string BytesToText(byte[] buff, Encoding encoding)
        {
            if (buff.Length == 0)
            {
                return("");
            }
            TextEncodingDetect detect = new TextEncodingDetect();

            encoding = detect.GetEncoding(buff, encoding);
            if (detect.hasBom)
            {
                if (encoding == Encoding.UTF8)
                {
                    return(encoding.GetString(buff, 3, buff.Length - 3));
                }
                if (encoding == Encoding.Unicode || encoding == Encoding.BigEndianUnicode)
                {
                    return(encoding.GetString(buff, 2, buff.Length - 2));
                }
                if (encoding == Encoding.UTF32)
                {
                    return(encoding.GetString(buff, 4, buff.Length - 4));
                }
            }
            return(encoding.GetString(buff));
        }
Exemplo n.º 2
0
 internal static bool Save(string fileName, string text, bool isAppend, bool writeLogOnError, Encoding encode)
 {
     try
     {
         //System.Text.Encoding.UTF8
         string folder = Path.GetDirectoryName(fileName);
         if (!Directory.Exists(folder))
         {
             Directory.CreateDirectory(folder);
         }
         string key = "IOHelper_Save_" + fileName.GetHashCode();
         if (cache.Contains(key))
         {
             encode = cache.Get <Encoding>(key);
         }
         else if (File.Exists(fileName))
         {
             TextEncodingDetect detect       = new TextEncodingDetect();
             Encoding           detectEncode = detect.GetEncoding(File.ReadAllBytes(fileName), encode);
             if (detectEncode != Encoding.ASCII)
             {
                 encode = detectEncode;
             }
             cache.Set(key, encode, 60);
         }
         lock (GetLockObj(fileName.Length))
         {
             using (StreamWriter writer = new StreamWriter(fileName, isAppend, encode))
             {
                 writer.Write(text);
             }
         }
         return(true);
     }
     catch (Exception err)
     {
         if (writeLogOnError)
         {
             Log.WriteLogToTxt(err);
         }
         else
         {
             Error.Throw("IOHelper.Save() : " + err.Message);
         }
     }
     return(false);
 }
Exemplo n.º 3
0
 internal static bool Save(string fileName, string text, bool isAppend, bool writeLogOnError, Encoding encode, int tryCount)
 {
     try
     {
         //System.Text.Encoding.UTF8
         string folder = Path.GetDirectoryName(fileName);
         if (!Directory.Exists(folder))
         {
             Directory.CreateDirectory(folder);
         }
         string key = "IOHelper_Save_" + fileName.GetHashCode();
         if (cache.Contains(key))
         {
             encode = cache.Get <Encoding>(key);
         }
         else if (File.Exists(fileName))
         {
             TextEncodingDetect detect       = new TextEncodingDetect();
             Encoding           detectEncode = detect.GetEncoding(File.ReadAllBytes(fileName), encode);
             if (detectEncode != Encoding.ASCII)
             {
                 encode = detectEncode;
             }
             cache.Set(key, encode, 60);
         }
         lock (GetLockObj(fileName.Length))
         {
             try
             {
                 using (StreamWriter writer = new StreamWriter(fileName, isAppend, encode))
                 {
                     if (!isAppend && fileName.EndsWith(".txt"))
                     {
                         //写入bom头
                     }
                     writer.Write(text);
                 }
             }
             catch (Exception err)
             {
                 if (tryCount > 0)
                 {
                     tryCount--;
                     Thread.Sleep(500 + (3 - tryCount) * 500);
                     Save(fileName, text, isAppend, writeLogOnError, encode, tryCount);
                 }
                 else
                 {
                     Error.Throw(err.Message);
                 }
             }
         }
         return(true);
     }
     catch (Exception err)
     {
         if (tryCount == 3) // 避免死循环。
         {
             if (writeLogOnError)
             {
                 Log.Write(err, LogType.Error);
             }
             else
             {
                 Error.Throw("IOHelper.Save() : " + err.Message);
             }
         }
     }
     return(false);
 }
Exemplo n.º 4
0
        public static string BytesToText(byte[] buff, Encoding encoding)
        {
            if (buff.Length == 0)
            {
                return("");
            }
            //if (buff[0] == 239 && buff[1] == 187 && buff[2] == 191)
            //{
            //    return Encoding.UTF8.GetString(buff, 3, buff.Length - 3);
            //}
            //else if (buff[0] == 255 && buff[1] == 254)
            //{
            //    return Encoding.Unicode.GetString(buff, 2, buff.Length - 2);
            //}
            //else if (buff[0] == 254 && buff[1] == 255)
            //{
            //    if (buff.Length > 3 && buff[2] == 0 && buff[3] == 0)
            //    {
            //        return Encoding.UTF32.GetString(buff, 4, buff.Length - 4);
            //    }
            //    return Encoding.BigEndianUnicode.GetString(buff, 2, buff.Length - 2);
            //}
            //else
            //{
            TextEncodingDetect detect = new TextEncodingDetect();

            //检测Bom
            switch (detect.DetectWithBom(buff))
            {
            case TextEncodingDetect.Encoding.Utf8Bom:
                return(Encoding.UTF8.GetString(buff, 3, buff.Length - 3));

            case TextEncodingDetect.Encoding.UnicodeBom:
                return(Encoding.Unicode.GetString(buff, 2, buff.Length - 2));

            case TextEncodingDetect.Encoding.BigEndianUnicodeBom:
                return(Encoding.BigEndianUnicode.GetString(buff, 2, buff.Length - 2));

            case TextEncodingDetect.Encoding.Utf32Bom:
                return(Encoding.UTF32.GetString(buff, 4, buff.Length - 4));
            }
            if (encoding != DefaultEncoding && encoding != Encoding.ASCII)//自定义设置编码,优先处理。
            {
                return(encoding.GetString(buff));
            }
            switch (detect.DetectWithoutBom(buff, buff.Length > 1000 ? 1000 : buff.Length))//自动检测。
            {
            case TextEncodingDetect.Encoding.Utf8Nobom:
                return(Encoding.UTF8.GetString(buff));

            case TextEncodingDetect.Encoding.UnicodeNoBom:
                return(Encoding.Unicode.GetString(buff));

            case TextEncodingDetect.Encoding.BigEndianUnicodeNoBom:
                return(Encoding.BigEndianUnicode.GetString(buff));

            case TextEncodingDetect.Encoding.Utf32NoBom:
                return(Encoding.UTF32.GetString(buff));

            case TextEncodingDetect.Encoding.Ansi:
                if (IsChineseEncoding(DefaultEncoding) && !IsChineseEncoding(encoding))
                {
                    if (detect.IsChinese)
                    {
                        return(Encoding.GetEncoding("gbk").GetString(buff));
                    }
                    else    //非中文时,默认选一个。
                    {
                        return(Encoding.Unicode.GetString(buff));
                    }
                }
                else
                {
                    return(encoding.GetString(buff));
                }

            case TextEncodingDetect.Encoding.Ascii:
                return(Encoding.ASCII.GetString(buff));

            default:
                return(encoding.GetString(buff));
            }
            // }
        }