C#获取文件的编码格式(UTF-8/UNICODE/ASCII)
C#获取文件的编码格式(UTF-8/UNICODE/ASCII)给定文件的路径,读取文件的二进制数据,判断文件的编码类型, 返回文件的编码类型如:
Encoding.ASCII
Encoding.UTF8
Encoding.Unicode
Encoding.Defaut默认为ASCII编码。
C# Code:
/// <summary>
/// 给定文件的路径,读取文件的二进制数据,判断文件的编码类型
/// </summary>
/// <param name=“FILE_NAME“>文件路径</param>
/// <returns>文件的编码类型</returns>
public static System.Text.Encoding GetType(string FILE_NAME)
{
using (FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read))
{
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;
using (BinaryReader reader = new BinaryReader(fs, System.Text.Encoding.Default))
{
int i;
int.TryParse(fs.Length.ToString(), out i);
byte[] ss = reader.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;
}
return reVal;
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 给定文件的路径,读取文件的二进制数据,判断文件的编码类型
/// </summary>
/// <param name=“FILE_NAME“>文件路径</param>
/// <returns>文件的编码类型</returns>
public static System.Text.Encoding GetType(string FILE_NAME)
{
using (FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read))
{
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;
using (BinaryReader reader = new BinaryReader(fs, System.Text.Encoding.Default))
{
int i;
int.TryParse(fs.Length.ToString(), out i);
byte[] ss = reader.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;
}
return reVal;
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
C# Code:
/// <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/S框架网 | www.csframework.com | QQ:23404761
/// <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/S框架网 | www.csframework.com | QQ:23404761

参考文档:
C#生成中文汉字拼音全码、助记码
SQLServer SQL函数解析JSON数据格式并返回表
StrUtils类:字符串处理/加密解密函数库
[原创]C#一键隐藏QQ/MSN,显示/隐藏系统托盘图标,获取托盘图标
SQL注入法攻击一日通
SQL注入漏洞全接触--进阶篇
达梦数据库数据类型详解
C# DataSet与XML互转|C/S开发框架
C# DataTable与XML互转|C/S开发框架
C#直接使用DllImport外部Dll的方法-C/S开发框架
C# Byte数组操作-C/S开发框架
C#使用PInvoke.Kernel32加载非托管DLL嵌入资源-C/S开发框架
C# Base64编码解码工具类 Base64Tool.cs
C# FieldFitString类:将资料表(DataTable)已修改的资料行数据去左右空格、全角转半角
C# 获取字符串实际长度(总字节数)中文2字节字母1字节
C# Rijndael Encrypt加密/Decrypt解密算法
C#生成中文汉字拼音全码、助记码
SQLServer SQL函数解析JSON数据格式并返回表
StrUtils类:字符串处理/加密解密函数库
[原创]C#一键隐藏QQ/MSN,显示/隐藏系统托盘图标,获取托盘图标
SQL注入法攻击一日通
SQL注入漏洞全接触--进阶篇
达梦数据库数据类型详解
C# DataSet与XML互转|C/S开发框架
C# DataTable与XML互转|C/S开发框架
C#直接使用DllImport外部Dll的方法-C/S开发框架
C# Byte数组操作-C/S开发框架
C#使用PInvoke.Kernel32加载非托管DLL嵌入资源-C/S开发框架
C# Base64编码解码工具类 Base64Tool.cs
C# FieldFitString类:将资料表(DataTable)已修改的资料行数据去左右空格、全角转半角
C# 获取字符串实际长度(总字节数)中文2字节字母1字节
C# Rijndael Encrypt加密/Decrypt解密算法
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
