载入中,请稍候……

通过查询文本文件流前导符判断文本编码[C#]

Admin 于 2008-09-29 02:13:36 发表.NET

订阅: http://www.miniboke.com/Feed/Article_56.aspx
引用: http://www.miniboke.com/Trackback/njqoVWHAWFTyeDWKWTpQ.aspx (UTF-8)
后台线程定期执行GC.Collect() < 通过查询文本文件流前导符判断文本编码[C#] > 程序员创业失败的16个原因

  1. /// <summary> 
  2. /// 取得一个文本文件流的编码方式。 
  3. /// </summary> 
  4. /// <param name="stream">文本文件流。</param> 
  5. /// <param name="defaultEncoding">默认编码方式。 
  6. /// 当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。 
  7. /// </param> 
  8. /// <returns></returns> 
  9. public static Encoding GetEncoding(FileStream stream, Encoding defaultEncoding) 
  10.     Encoding targetEncoding = defaultEncoding; 
  11.     if(stream != null && stream.Length >= 2) 
  12.     { 
  13.         //保存文件流的前4个字节 
  14.         byte byte1 = 0; 
  15.         byte byte2 = 0; 
  16.         byte byte3 = 0; 
  17.         byte byte4 = 0; 
  18.         //保存当前Seek位置 
  19.         long origPos = stream.Seek(0, SeekOrigin.Begin); 
  20.         stream.Seek(0, SeekOrigin.Begin); 
  21.         
  22.         int nByte = stream.ReadByte(); 
  23.         byte1 = Convert.ToByte(nByte); 
  24.         byte2 = Convert.ToByte(stream.ReadByte()); 
  25.         if(stream.Length >= 3) 
  26.         { 
  27.             byte3 = Convert.ToByte(stream.ReadByte()); 
  28.         } 
  29.         if(stream.Length >= 4) 
  30.         { 
  31.             byte4 = Convert.ToByte(stream.ReadByte()); 
  32.         } 
  33.         //根据文件流的前4个字节判断Encoding 
  34.         //Unicode {0xFF, 0xFE}; 
  35.         //BE-Unicode {0xFE, 0xFF}; 
  36.         //UTF8 = {0xEF, 0xBB, 0xBF}; 
  37.         if(byte1 == 0xFE && byte2 == 0xFF)//UnicodeBe 
  38.         { 
  39.             targetEncoding = Encoding.BigEndianUnicode; 
  40.         } 
  41.         if(byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF)//Unicode 
  42.         { 
  43.             targetEncoding = Encoding.Unicode; 
  44.         } 
  45.         if(byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF)//UTF8 
  46.         { 
  47.             targetEncoding = Encoding.UTF8; 
  48.         } 
  49.         //恢复Seek位置       
  50.         stream.Seek(origPos, SeekOrigin.Begin); 
  51.     } 
  52.     return targetEncoding; 
被阅1124次, 1投一票编码
  • 看完了要说点啥么?
  • 昵称 (不填说不了话)
  • 信箱地址 (不会被公开,但是不填也说不了话)
  • 网址 (这个不填也成)

Powered by MiniBoke v2.0.0.8 Build 0828

Copyright © 2008 迷你博客. All rights reserved.

粤ICP备07500939号