C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)-来自转载收集
- using System;
- using System.IO;
- using System.Text;
- /// <summary>
- /// FileEncoding 的摘要说明
- /// </summary>
- namespace FileEncoding
- {
- /// <summary>
- /// 获取文件的编码格式
- /// </summary>
- public 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[] == 0xEF && ss[] == 0xBB && ss[] == 0xBF))
- {
- reVal = Encoding.UTF8;
- }
- else if (ss[] == 0xFE && ss[] == 0xFF && ss[] == 0x00)
- {
- reVal = Encoding.BigEndianUnicode;
- }
- else if (ss[] == 0xFF && ss[] == 0xFE && ss[] == 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 = ; //计算当前正分析的字符应还有的字节数
- byte curByte; //当前分析的字节.
- for (int i = ; i < data.Length; i++)
- {
- curByte = data[i];
- if (charByteCounter == )
- {
- if (curByte >= 0x80)
- {
- //判断当前
- while (((curByte <<= ) & 0x80) != )
- {
- charByteCounter++;
- }
- //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X
- if (charByteCounter == || charByteCounter > )
- {
- return false;
- }
- }
- }
- else
- {
- //若是UTF-8 此时第一位必须为1
- if ((curByte & 0xC0) != 0x80)
- {
- return false;
- }
- charByteCounter--;
- }
- }
- if (charByteCounter > )
- {
- throw new Exception("非预期的byte格式");
- }
- return true;
- }
- }
- }
来自转载
C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)-来自转载收集的更多相关文章
- C#获取文本文件的编码,自动区分GB2312和UTF8
C# 获取文本文件的编码,自动区分GB2312和UTF8 以下是获取文件编码的一个类 using System; using System.IO; using System.Text; /// < ...
- 字符编码笔记:ASCII,Unicode和UTF-8【转载】
作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步 ...
- 字符编码笔记:ASCII,Unicode和UTF-8(转载)
注:我注释的地方有 add by zhj.另Unicode.UTF-8.GB2312查询http://www.2fz1.com/so/ 在python中,a.decode(xxx)就是把str类型的字 ...
- [C#.net]获取文本文件的编码,自动区分GB2312和UTF8
昨天生产突然反馈上传的结果查询出现了乱码,我赶紧打开后台数据库,发现果真有数据变成了乱码.这个上传程序都运行3个多月了,从未发生乱码现象,查看程序的运行日志,发现日志里的中文都变成了乱码,然后对比之前 ...
- [No000040]取得一个文本文件的编码方式
using System; using System.IO; using System.Text; /// <summary> /// 用于取得一个文本文件的编码方式(Encoding). ...
- Atitit.检测文本文件的编码 自动获取文件的中文编码
Atitit.检测文本文件的编码 自动获取文件的中文编码 1 不能使用load来检测编码..1 2 使用convert来检测编码1 3 程序检测文本编码2 3.1 根据utf bom头2 3.2 检测 ...
- python文件(概念、基本操作、常用操作、文本文件的编码方式)
文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...
- 获取文本的编码类型(from logparse)
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- 获取文本文件的第N行内容
在PowerShell中,可以通过Get-Content这个cmdlet来获取文本文件的内容.Get-Content将一个文本文件读取到一个数组中,每一个数组元素就是文件的一行内容.比如一个文本文件内 ...
随机推荐
- 【转载】让你的MATLAB代码飞起来
原文地址:http://developer.51cto.com/art/201104/255128_all.htm MATLAB语言是一种被称为是"演算纸"式的语言,因此追求的是方 ...
- 常用的shell命令
作为一名有10年以上使用年龄的Linux/MacOSX用户来说,键盘的作用往往要远大于鼠标.而且,作为一个黑客文化的追随者,我也希望越来越多的用户能认识到命令行的潜在价值,不要把它视为只是计算机专家们 ...
- X86 Socket 通信
struct txd_socket_handler_t { int fd; }; txd_socket_handler_t *txd_tcp_socket_create() { txd_socket_ ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- mac电脑的使用
1. control + command + a 截图 2. shift + command + g 前往 3.在 Mac OS X 中怎样获取当前文件夹的路径 原文网址:https://www.zh ...
- docker 私有镜像管理工具harbor 安装
因为各种原因,官方的离线安装包下载比较费事,经常不成功,所以通过分部安装解决问题 1. docker yum install libdevmapper* -y -H tcp://0.0.0.0:237 ...
- github上传本地项目
github上传本地项目,分为两个部分: 1.如果建立了ssh key的,直接看第二部分的上传部分就行了 2.如果没有建立ssh key的,就从头开始看吧 ——————————————————我是快乐 ...
- Qt多重继承时的信号与槽
最近在公司项目中开发串口,因为历史原因串口要包装一下,且包装类需要继承自一个纯C++类. QSerialPort可以使用slot function来获取从串口读到的数据,以及写入串口的bytes个数. ...
- [linux] linux shell 将解析完毕的文件备份至其他目录
#!/bin/bash # #将解析完毕的日志备份到别的目录 # #日志目录 rjPath=`ls /home/bgftp/orj` #当前时间戳 cur=`date +%s` #一小时 chtm=3 ...
- Oracle定时计划快速使用
Oracle定时计划快速使用 前言: SQL Server中有相关的定时计划,可以直接打开sql server 的任务管理器进行配置,可以方便.快速实现定时执行相应任务.相应的Oracle也有对应的定 ...