C# 通过StreamWriter输出的TXT流文件,前缀带EF BB BF
好久没有动笔写博客了,这个小天地被我闲置的放了好久好久,接下来要慢慢捡起来了。
备注:通过C#的StreamWriter类输出一个TXT流文件,供下位机工程师使用,发现打开的16进制文件中,默认添加了EF BB BF前缀。
1 public int SaveZAbnormalScrollbaskTxt(string strTargetPath)
2 {
3 try
4 {
5 string strBufferLine = "";
6 string expressionString = null;
7 int nNumber = 0;
8 DataRow dr;
9 StreamWriter streamWriter = new StreamWriter(strTargetPath, false,Encoding.UTF8);
10 for (int i = 0; i < dbZStressAbnormalStatistics.Rows.Count; i++)
11 {
12 dr = dbZStressAbnormalStatistics.Rows[i];
13
14 //从特征点表中取到经纬度方向,距离等值。
15 if (Convert.ToString(dr[4]) == "" && String.IsNullOrEmpty(Convert.ToString(dr[4])))
16 continue;
17
18 var gpsDr = GetGpsPointRow(dr[2].ToString(), dr[1].ToString());
19 if (gpsDr == null)
20 continue;
21
22 strBufferLine = "00" + (++nNumber) + "," + dr[2] + "," + gpsDr[3] + "," + dr[1] + "," + gpsDr[5] + "," + gpsDr[6] +
23 "," + gpsDr[1] + "," + dr[7] + ",X";
24 if (strBufferLine.Length<64)
25 {
26 for (int j = strBufferLine.Length; j < 62; j++)
27 {
28 strBufferLine +=" ";
29 }
30 strBufferLine += "\r\n";
31 }
32 var ab = strBufferLine.Length;
33 streamWriter.Write(strBufferLine);
34 }
35 streamWriter.Close();
36 streamWriter.Dispose();
37 return 100;
38 }
39 catch (Exception ex)
40 {
41 throw new Exception(ex.Message);
42 }
43 }
代码中默认是以UTF-8格式输出保存的,通过记事本和NotPadd++打开都没有问题,但只要以16进制打开就会显示默认的EF BB BF格式前缀。

经查验,发现windows电脑在使用过程中,会将文件默认添加EF BB BF前缀,网上给出的解答说是转换为GB2312这种中国编码制定的格式就可以。
1 StreamWriter streamWriter = new StreamWriter(strTargetPath, false,Encoding.GetEncoding("GB2312"));
试了试确实可以解决了我的问题。

既然找到问题的根源,那么就顺便记录下具体的原因吧。
Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明:
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
C# 通过StreamWriter输出的TXT流文件,前缀带EF BB BF的更多相关文章
- UTF-8文件的Unicode签名BOM(Byte Order Mark)问题记录(EF BB BF)
背景 楼主测试的批量发送信息功能上线之后,后台发现存在少量的ERROR日志,日志内容为手机号码格式不正确. 此前测试过程中没有出现过此类问题,从运营人员拿到的发送列表的TXT,号码是符合规则的,且格式 ...
- 将Matlab中的矩阵输出到txt文件
将矩阵输出到txt文件中的方法,遍寻网络,始见真经!!! fid=fopen('C:Documents and Settingscleantotal.ped','wt');%写入文件路径 matrix ...
- 将CMD内的显示内容输出到txt文件
将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt //xxxx为命令 如ping www.baidu.com //-t >c:\test.tx ...
- sort命令与cat区别25.1 由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile [root@shiyan a]# cat a.txt aaaaaa [root@shiyan a]# sort a.txt >c.txt ------------- 在重定向前会自动创建c.txt这个文件。 [root@shiyan
25.1 由于sort默认是把结果按照行排序后输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile[root@shiyan a]# cat a. ...
- 写文件的工具类,输出有格式的文件(txt、json/csv)
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...
- python筛选特定文件的信息按照格式输出到txt
最近搞数据库,为了把图片文件的信息导入数据库表中,我开始研究python列出图片文件,其中发现因为IE临时文件里有非常多的不需要的图片,就需要筛选掉一些文件. 最终用python输出了所有需要的图片文 ...
- Java代码输出到txt文件(申请专利贴源码的必备利器)
最近公司在申请专利,编写不少文档,项目的代码量实在是过于庞大.如果一个一个的复制粘贴虽然能够完成,但是对于程序员而言实在没有这个必要.shell或者python就能解决这个问题.由于我个人对于shel ...
- java 流 文件 IO
Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...
- 输入和输出(IO流)
File类的常用方法: File对象的创建和部分方法使用: File file =new File("file\\我是文本.txt"); System.out.println(&q ...
- 节点流(文件流) FileInputStream & FileOutputStream & FileReader & FileWriter
节点流(文件流) FileInputStream(字节流)处理视频类的 FileOutputStream(字节流) FileReader(字符流)处理文本文件 ...
随机推荐
- AngularJs directive详解及示例代码
Directive(指令)笔者认为是AngularJ非常强大而有有用的功能之一.它就相当于为我们写了公共的自定义DOM元素或CLASS属性或ATTR属性,并且它不只是单单如此,你还可以在它的基础上来操 ...
- echo 操作
echo打印制表符到文件: MAP_PATH=/path/for i in `cat sp.list`; do echo -e "${MAP_PATH}/${i}.${i}/${i}.fin ...
- Flink 中 DataStream 和 DataSet区别
DataSet与DataStream的区别.使用 DataSet同DataStream从其接口封装.真实计算Operator有很大的差别,Dataset的实现在flink-javamodule中,而D ...
- 类继承(c++ primer plus)课后习题
第一题: // base class class Cd { // represents a CD disk private: char performers[50]; char label[20]; ...
- 【Delphi7官方镜像版】delphi_7_ent_en官方镜像 阿里云盘
[Delphi7官方镜像版]「delphi_7_ent_en官方镜像.iso.exe」https://www.aliyundrive.com/s/Du9C4XfZfwG 点击链接保存,或者复制本段内容 ...
- 3月1日Android开学学习
Android开发的简单控件 1.文本显示 2.视图基础 3.常用布局 4.按钮触控 5.图像显示 文本显示 (1)设置文本内容 1.在XML文件中通过属性Android:text设置文本 Andro ...
- PLC入门笔记6
计数器指令及其应用 计数器指令介绍 很多场合需要进行计数操作.例如电机启动次数.生产线物料经过次数.位置传感器传送的脉冲次数等. 计数器分为普通和高速两种. 比PLC扫描频率远小于用普通,接近或大于用 ...
- OSIDP-内存管理-07
专业术语 页框:内存中固定长度的块. 页:外存中固定长度的块. 段:外存中可变长度的块. 内存管理需求 重定位:程序从内存换出到外存后,再换回内存时,在内存空间中的位置和原先的位置有极大可能不相同.此 ...
- lcd 驱动程序框架分析
在嵌入式产品中,lcd的用途可谓很大,很多产品都会用到lcd作为人机交互的接口,在linux内核中当然也有lcd的驱动,内核中都是做好了框架,用平台设备来添加和管理不同的lcd驱动程序,因为每款arm ...
- 03-Spring使用注解方式注入
基于注解的DI注入 1.导包 环境搭建:导入aop包(spring-aop-4.1.6.RELEASE.jar) 2.创建类 3. 创建spring.xml配置文件(必须在src目录下) 该配置文件与 ...