txt文本文件编码格式-图片文件类型检测-音视频文件信息
2017-05-04 14:59
543 查看
txt文本文件编码格式-图片文件类型检测-音视频文件信息
本文介绍如何获取文本文件的编码格式,如果用c#转换编码格式,如何获取图片文件的类型(不是以文件扩展名来判断),获取音视频文件的基本信息。文件的字符集在Windows下有两种,一种是ANSI,一种Unicode。
对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码(Unicode),一种是大尾编码(BigEndianUnicode),一种是UTF-8编码。
我们可以从文件的头部来区分一个文件是属于哪种编码。当头部开始的两个字节为 FF FE时,是Unicode的小尾编码;当头部的两个字节为FE FF时,是Unicode的大尾编码;当头部两个字节为EF BB时,是Unicode的UTF-8编码;当它不为这些时,则是ANSI编码。
1 获取文本文件的编码格式,转换编码格式
直接上代码/// <summary> /// 获取文本文件的编码格式 /// </summary> /// <param name="filename">文件路径</param> /// <returns></returns> public static System.Text.Encoding GetTxtFileEncodeType(string filename) { try { System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read); System.IO.BinaryReader br = new System.IO.BinaryReader(fs); Byte[] buffer = br.ReadBytes(2); br.Close(); fs.Close(); if (buffer[0] >= 0xEF) { if (buffer[0] == 0xEF && buffer[1] == 0xBB) { return System.Text.Encoding.UTF8; } else if (buffer[0] == 0xFE && buffer[1] == 0xFF) { return System.Text.Encoding.BigEndianUnicode; } else if (buffer[0] == 0xFF && buffer[1] == 0xFE) { return System.Text.Encoding.Unicode; } else { return System.Text.Encoding.Default; } } else { return System.Text.Encoding.Default; } } catch(Exception ex) { } return null; } /// <summary> /// 转换文本文件编码 /// </summary> /// <param name="filePath">文本文件路径</param> /// <param name="oldEncoding">旧的文本编码</param> /// <param name="newEncoding">要转换成的编码</param> public static void ChangeTxtFileCodeing(String filePath, Encoding oldEncoding, Encoding newEncoding) { try { FileStream fs = new FileStream(filePath, FileMode.Open); StreamReader sr = new StreamReader(fs, oldEncoding); FileStream fsw = new FileStream(filePath + ".temp", FileMode.OpenOrCreate); BinaryWriter bw = new BinaryWriter(fsw, newEncoding); Char[] buffer = new char[1024]; int i = sr.Read(buffer, 0, 1024); while (i > 0) { //转换 Byte[] buf = newEncoding.GetBytes(buffer, 0, i); bw.Write(buf); i = sr.Read(buffer, 0, 1024); } sr.Close(); bw.Close(); fs.Close(); fsw.Close(); File.Delete(filePath); File.Move(filePath + ".temp", filePath); } catch (Exception ex) { } }
一个调用的例子:
#region === txt 非utf8文件转换成 utf-8编码格式 === if (fileExt.ToLower().Contains("txt")) { var filecodeType = Utility.FileHelper.GetTxtFileEncodeType(savePath); if (filecodeType != System.Text.Encoding.UTF8) { Utility.FileHelper.ChangeTxtFileCodeing(savePath, Encoding.Default, Encoding.UTF8); } } #endregion
2 获取图片类型-格式
/// <summary> /// 获取Image图片格式 /// </summary> /// <param name="filePath">文件路径</param> /// <param name="format">out 图片格式后缀 如: .jpg,.gif,.bmp,.png</param> /// <returns></returns> public static System.Drawing.Imaging.ImageFormat GetImageFormat(String filePath, out string format) { byte[] sb = new byte[2]; //这次读取的就是直接0-1的位置长度了. FileStream file = new FileStream(filePath, FileMode.Open); file.Read(sb, 0, sb.Length); //根据文件头判断 string strFlag = sb[0].ToString() + sb[1].ToString(); file.Close(); //察看格式类型 switch (strFlag) { //JPG格式 case "255216": format = ".jpg"; return System.Drawing.Imaging.ImageFormat.Jpeg; //GIF格式 case "7173": format = ".gif"; return System.Drawing.Imaging.ImageFormat.Gif; //BMP格式 case "6677": format = ".bmp"; return System.Drawing.Imaging.ImageFormat.Bmp; //PNG格式 case "13780": format = ".png"; return System.Drawing.Imaging.ImageFormat.Png; //其他格式 default: format = string.Empty; return null; } }
3 音视频文件信息
音视频文件的相关信息相对复杂,参考该类文件结构也可以利用读取相应的字节来判断,但这里我们用一个第三方的类库来做,本例用的是 mediaInfo.net 如下图,直接在nuget里可搜索到并安装用法如下:
MediaInfoDotNet.MediaFile aviFile = new MediaInfoDotNet.MediaFile(@"M:\lifobao\song\amituofo1.mp3"); Console.WriteLine(); Console.WriteLine("General ---------------------------------"); Console.WriteLine(); Console.WriteLine("File Name : {0}", aviFile.filePath); Console.WriteLine("Format : {0}", aviFile.General.Format); Console.WriteLine("Duration : {0}", aviFile.General.Duration); Console.WriteLine("Bitrate : {0}", aviFile.General.BitRate); if (aviFile.Audio.Count > 0) { Console.WriteLine(); Console.WriteLine("Audio ---------------------------------"); Console.WriteLine(); Console.WriteLine("Format : {0}", aviFile.Audio[0].Format); Console.WriteLine("Bitrate : {0}", aviFile.Audio[0].BitRate.ToString()); Console.WriteLine("Channels : {0}", aviFile.Audio[0].Channels.ToString()); Console.WriteLine("Sampling : {0}", aviFile.Audio[0].SampleRate.ToString()); } if (aviFile.Video.Count > 0) { Console.WriteLine(); Console.WriteLine("Video ---------------------------------"); Console.WriteLine(); Console.WriteLine("Format : {0}", aviFile.Video[0].Format); Console.WriteLine("Bit rate : {0}", aviFile.Video[0].BitRate.ToString()); Console.WriteLine("Frame rate : {0}", aviFile.Video[0].FrameRate.ToString()); Console.WriteLine("Frame size : {0}", aviFile.Video[0].frameCount.ToString()); }
图片格式等信息也可以用该类来处理
--- end ---
相关文章推荐
- 目标检测坐标信息txt文件转Pascal VOC XML 格式(仅包括对角框正矩形标注)
- js判断文件类型,图片、视频等格式
- 使用作业,每天定时将DB中信息导出到指定的文件夹中txt文本中(文件格式按照时间)
- JS 客户端验证文件类型,获取图片信息
- 在ASP中自动检测文件的编码格式,支持UTF-8、GB2312、UTF-7、Unicode、Unicode Swap等格式的检测
- VB打开/保存任意编码格式文本文件
- JS 客户端验证文件类型,获取图片信息
- 视频编码与文件格式的对应关系及用途
- 文本读写与编码格式(1)----文本格式判断(基于文件的FileMap)
- 常用音视频编码和文件格式
- 获得视频文件编码格式
- ASP.NET上传图片,服务器端验证,宽度,高度,文件类型,尺寸,文件大小,图片上传,图片格式检查
- IE+JS: 上传之前检测图片文件大小及类型
- ASP.NET上传图片,服务器端验证,宽度,高度,文件类型,尺寸,文件大小,图片上传,图片格式检查
- 网络视频文件处理:格式转换Flv、截取图片
- 截取视频文件第一桢的图片和转换视频格式文件为flv(支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv)
- [转]截取视频文件第一桢的图片和转换视频格式文件为flv(支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv)
- as3中检测客户端的环境信息如是否有音视频,操作系统类型等等
- JS 客户端验证文件类型,获取图片信息
- 检测视频文件编码方式的工具和一些基本常识