C#编程语言之获取文件编码格式(转载)
class EncodingType
{ /// <summary> /// 给定文件的路径,读取文件的二进制数据,判断文件的编码类型 /// </summary> /// <param name="FILE_NAME">文件路径</param> /// <returns>文件的编码类型</returns> public static System.Text.Encoding GetType(string FILE_NAME) { FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read); Encoding r = GetType(fs); fs.Close(); return r; } /// <summary> /// 通过给定的文件流,判断文件的编码类型 /// </summary> /// <param name="fs">文件流</param> /// <returns>文件的编码类型</returns> public static System.Text.Encoding GetType(FileStream fs) { byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 }; byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 }; byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM Encoding reVal = Encoding.Default; BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default); int i; int.TryParse(fs.Length.ToString(), out i); byte[] ss = r.ReadBytes(i); if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)) { reVal = Encoding.UTF8; } else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) { reVal = Encoding.BigEndianUnicode; } else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) { reVal = Encoding.Unicode; } r.Close(); return reVal; } /// <summary> /// 判断是否是不带 BOM 的 UTF8 格式 /// </summary> /// <param name="data"></param> /// <returns></returns> private static bool IsUTF8Bytes(byte[] data) { int charByteCounter = 1; //计算当前正分析的字符应还有的字节数 byte curByte; //当前分析的字节. for (int i = 0; i < data.Length; i++) { curByte = data[i]; if (charByteCounter == 1) { if (curByte >= 0x80) { //判断当前 while (((curByte <<= 1) & 0x80) != 0) { charByteCounter++; } //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X if (charByteCounter == 1 || charByteCounter > 6) { return false; } } } else { //若是UTF-8 此时第一位必须为1 if ((curByte & 0xC0) != 0x80) { return false; } charByteCounter--; } } if (charByteCounter > 1) { throw new Exception("非预期的byte格式"); } return true; }
}
C#编程语言之获取文件编码格式(转载)相关推荐
- pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件
pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件 目录
- java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...
我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况. 根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件 ...
- java获取文件编码_java如何获取文件编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...
- 获取文件编码格式 java_java实现获取文本文件的字符编码
一.认识字符编码: 1.Java中String的默认编码为UTF-8,可以使用以下语句获取:Charset.defaultCharset(); 2.Windows操作系统下,文本文件的默认编码为ANS ...
- python获取文件编码格式除了chardet还有别的方式吗_使用python的chardet库获得文件编码并修改编码...
首先需要安装chardet库,有很多方式,我才用的是比较笨的方式:sudo pip install chardet #!/usr/bin/env python # coding: UTF-8 impo ...
- paip.enhes efis 自动获取文件的中文编码
paip.enhes efis 自动获取文件的中文编码 ##为什么需要自动获取文件的中文编码 提高开发效率,自动获取文件的中文编码 .不需要手动设置编码...轻松的.. ##cpdetector 可 ...
- java写入文件编码格式为ansi_Java读取、写入文件如何解决乱码问题
读取文件流时,经常会遇到乱码的现象,造成乱码的原因当然不可能是一个,这里主要介绍因为文件编码格式而导致的乱码的问题.首先,明确一点,文本文件与二进制文件的概念与差异. 文本文件是基于字符编码的文件,常 ...
- java 判断是否为cst格式_Java判断文件编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...
- node 获取文件编码,批量转换文件编码
node 批量转换文件编码 解决方案 使用 npm@jschardet 获取文件编码信息(并非 100%准确) 通过 npm@iconv-lite 结合文件二进制流,重新识别文件内容 核心代码如下: ...
最新文章
- java ftp 判断文件是否存在_FTP判断文件是否存在
- 「NOI2017」泳池
- 深入理解JVM原理之编译openjdk7
- [数组] 连续子数组的最大和 --- LeetCode53
- iOS AutoLayout使用技巧
- 配置centos7 IP以及网络问题的排查
- CPaintDC 、CWindowDC、 CClientDC、cMemDC、 CDC
- 数据仓库与数据挖掘复习题目
- 第一章第一节第一课时智能训练(2012-01-18 18:42:23)
- 2022-2028年全球与中国汽车齿轮齿条转向系统产业市场前瞻与投资战略规划分析报告
- 零基础:21天搞定Python分布爬虫
- Word设置默认隐藏页面间空白
- C/C++:打印乘法口诀表
- 电脑蓝牙模式接收手机文件
- VulkanAPI架构
- 儒略日(CSP S2 第一题)
- 微信小程序——订阅消息与微信公众号模板消息
- F-PointNets
- Python学习案例2——数独解题及出题程序
- tomcat报错 Unable to process Jar entry