载入中,请稍候……

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

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

  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; 
被阅1070次, 1票编码 发表评论

编码字符之间的转换(C/C++)

Admin 于 2008-09-21 04:22:10 发表C/C++

最近一段做一些关于文字编码方面的东西,常常涉及到各种编码字符之间的转换。主要是做中日文方面的,包括中文gb2312, 日文JIS, SHIFT-JIS,以及他们和Unnicode码之间的转换。

被阅842次, 0票编码 VC++ 发表评论
1 / 1 / 2 | « 1 » |

Powered by MiniBoke v2.0.0.8 Build 0828

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

粤ICP备07500939号