在操作txt的时候,有时会出现乱码,这是因为没有使用正确的编码方式来操作txt,我们需要先获取txt的编码方式,再进行读写操作。下面是获取txt编码的方法:

/// <summary>
/// 获取TXT文件的编码方式
/// </summary>
public static class GetTxtFileEncoding
{
/// <summary>
/// 取得一个文本文件的编码方式。
/// 如果无法在文件头部找到有效的前导符,
/// Encoding.Default将被返回
/// </summary>
/// <param name="fileName">文件名</param>
/// <returns>文件的编码方式</returns>
public static Encoding GetEncoding(string fileName)
{
return GetEncoding(fileName, Encoding.Default);
} /// <summary>
/// 取得一个文本文件流的编码方式
/// </summary>
/// <param name="stream">文件流</param>
/// <returns>文件流的编码方式</returns>
public static Encoding GetEncoding(FileStream stream)
{
return GetEncoding(stream, Encoding.Default);
} /// <summary>
/// 取得一个文本文件的编码方式。
/// 当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="defaultEncoding">默认编码方式</param>
/// <returns>文件的编码方式</returns>
public static Encoding GetEncoding(string fileName, Encoding defaultEncoding)
{
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
Encoding targetEncoding = GetEncoding(fs, defaultEncoding);
fs.Close();
return targetEncoding;
}
} /// <summary>
/// 取得一个文本文件流的编码方式。
/// 当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。
/// </summary>
/// <param name="stream">文件流</param>
/// <param name="defaultEncoding">默认编码方式</param>
/// <returns>文件流的编码方式</returns>
public static Encoding GetEncoding(FileStream stream, Encoding defaultEncoding)
{
Encoding targetEncoding = defaultEncoding; if (stream != null && stream.Length >= 2)
{
//保存文件流的前4个字节
byte byte1 = 0;
byte byte2 = 0;
byte byte3 = 0;
byte byte4 = 0; //保存当前Seek位置
long origPos = stream.Seek(0, SeekOrigin.Begin);
stream.Seek(0, SeekOrigin.Begin);
int nByte = stream.ReadByte(); byte1 = Convert.ToByte(nByte);
byte2 = Convert.ToByte(stream.ReadByte());
if (stream.Length >= 3)
{
byte3 = Convert.ToByte(stream.ReadByte());
} if (stream.Length >= 4)
{
byte4 = Convert.ToByte(stream.ReadByte());
} //根据文件流的前4个字节判断Encoding
if (byte1 == 0xFE && byte2 == 0xFF)
{
//UnicodeBe
targetEncoding = Encoding.BigEndianUnicode;
}
if (byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF)
{
//Unicode
targetEncoding = Encoding.Unicode;
}
if (byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF)
{
//UTF8
targetEncoding = Encoding.UTF8;
} //恢复Seek位置
stream.Seek(origPos, SeekOrigin.Begin);
} return targetEncoding;
}
}

获取txt编码方式的更多相关文章

  1. VBA 判断一个TXT编码方式,再创建一个新的文件,复制数据进去

    如题,先读取一个文本文件判断编码(Unicode  ANSI),就这两种编码然后将txt导入到excel表中,最后处理完成,再创建一个相同编码,不同文件名的txt文件,把新数据放进去 Sub test ...

  2. python 判断 txt 编码方式

    import chardet f = open('/path/file.txt',r) data = f.read() print(chardet.detect(data)

  3. Java获取字符串编码方式

    直接下载吧: http://files.cnblogs.com/files/xiluhua/BytesEncodingDetectTool.rar

  4. servlet获取表单数据的方式和编码方式

    .在servlet中获取表单的数据的几种方式  1>request.getParameter(“name”)://获取指定名称的值,返回值类型是一个字符串  2>request.getPa ...

  5. Java实现将任何编码方式的txt文件以UTF-8编码方式转存

    本文利用JDK中的BufferedReader和BufferedWriter实现将任何编码方式的txt文件以UTF-8编码方式转存. UTF-8(8-bit Unicode Transformatio ...

  6. nodejs 获取文件的编码方式

    使用nodejs获取文件夹内文件的编码方式:使用jschardet模块. 下面的代码还有问题,没有添加结束的语句,没有判断应该在哪执行res.send(). res.send()不能放在forEach ...

  7. 【python】python编码方式,chardet编码识别库

    环境: python3.6 需求: 针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码. 针对这种需求,python中有这个方式可以很好的解决: 解决策略: ...

  8. form表单编码方式设置为multipart/form-data,后台参数出现乱码情况

    一般在上传图片过程中,form中的编码方式一般采用multipart/form-data方式编码,但是后台这取参数时,可能会出现乱码情况:这里后台要采用转换编码方式: 页面: 后台:获取表单元素时,

  9. Java文件读写操作指定编码方式防乱码

    读文件:BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,Re ...

随机推荐

  1. ctfshow—pwn10

    格式化字符串漏洞 具体什么是格式化字符串请大家参考如下文章 https://wiki.x10sec.org/pwn/fmtstr/fmtstr_intro/ printf函数格式化输出符号及详细说明 ...

  2. os.walk() 遍历目录下的文件夹和文件

    os.walk(top, topdown=True, onerror=None, followlinks=False) top:顶级目录 os.walk()返回一个三元tupple(dirpath, ...

  3. SAP demo包 示例程序

    在SAP的这个开发类中SABAPDEMOS,存放了N多的demo程序 有空的时候,可以看看.

  4. 【转】自定义ALV控件的工具条按钮

    1 CLASS lcl_event_receiver DEFINITION DEFERRED. 2 3 DATA: itab TYPE TABLE OF spfli, 4 wa TYPE spfli. ...

  5. 二十七:XSS跨站之代码及httponly绕过

    httponly:如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还Application 中手动修改 cookie,所以只是在一定 ...

  6. Docker下梦织CMS的部署

    摘要:Docker的广泛应用相对于传统的虚拟机而言提高了资源的利用率,推广后docker的影响不容忽视,在启动速度.硬盘.内存.运行密度.性能.隔离性和迁移性方面都有很大的提高.本次实训我们在cent ...

  7. ovsdb-client命令

    ovsdb-server 的命令行接口. 查看有哪些数据库: ovsdb-client list-dbs [server] 查看数据库 schema: ovsdb-client get-schema ...

  8. elasticsearch从开始到永久

    0.学习目标 独立安装Elasticsearch 会使用Rest的API操作索引 会使用Rest的API查询数据 会使用Rest的API聚合数据 掌握Spring Data Elasticsearch ...

  9. 将HDFS中指定文件的内容输出到终端。

    1 import java.io.*; 2 import org.apache.hadoop.conf.Configuration; 3 import org.apache.hadoop.fs.*; ...

  10. 线上nginx的一次“no live upstreams while connecting to upstream ”分析

    线上nginx的一次"no live upstreams while connecting to upstream "分析 线上nginx的一次"no live upst ...