首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

字节流编码获取原来这样复杂,但也很简单

2012-10-24 
字节流编码获取原来这么复杂,但也很简单///summary/// 解析 byte 数组是什么样的编码/// /summary///

字节流编码获取原来这么复杂,但也很简单
///<summary> /// 解析 byte 数组是什么样的编码 /// </summary> /// <param name="enc">要传回的编码类型</param> /// <param name="buff">要解析的byte数组</param> /// <remarks> /// 以下示例演示了如何使用 <see cref="GetEncoding"/>方法 /// <code> /// if(Request.Files.Count!=0) /// { /// //获取上传的文件 /// HttpPostedFile pf = Request.Files[0]; /// int fileLength = (int)pf.InputStream.Length; /// //存储上传文件的字节数组 /// byte[] buff = new byte[fileLength]; /// pf.InputStream.Read(buff,0,fileLength); /// pf.InputStream.Close(); /// Encoding enc = null; /// GetEncoding(out enc,buff); /// Response.Write("编码:"+enc.EncodingName); /// Response.Write("<br />"); /// Response.Write("内容:"+enc.GetString(buff)); /// } /// </code> /// </remarks> void GetEncoding(out Encoding enc,byte[] buff) { bool flag = false; //用于测试的编码 byte[] testencbuff = new byte[0]; int fileLength = buff.Length; //判断上传的文件的编码是否是Unicode enc = Encoding.Unicode; testencbuff = enc.GetPreamble(); if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1]) { flag = true; } //判断上传的文件的编码是否是UTF8 if(!flag) { enc = Encoding.UTF8; testencbuff = enc.GetPreamble(); if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1] && testencbuff[2]==buff[2]) { flag = true; } } //判断上传的文件的编码是否是BigEndianUnicode if(!flag) { enc = Encoding.BigEndianUnicode; testencbuff = enc.GetPreamble(); if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1]) { flag = true; } } if(!flag) { enc = Encoding.Default; } }

?


问题出现了,第二天同事告诉我,不是所有的UTF8编码的文件都有BOM信息,那如何解决呢?他先找到了答案 字节流编码获取原来这么复杂 (我也在google和baidu上搜索过,发现C#并没有很好的解决方案)
以下是两篇相关解决问题的文章(java)
http://dev.csdn.net/Develop/article/10/10961.shtm
http://dev.csdn.net/Develop/article/10/10962.shtm

java代码很容易移植到.NET上,那我就来为大家铺条路...
代码有2400多行,请在这里下载代码:下载代码


在移植代码的过程中感谢以下朋友的参与:
playyuer

<script type="text/javascript"></script>

热点排行