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(字符流)处理文本文件 ...
随机推荐
- 苹果公司对蓝牙免提AT指令的扩充
介绍 苹果公司对蓝牙HF profile进行了一些HF AT指令的扩充.不过为了兼容起见,尽量实现HF标准规范规定的内容,如果标准规范没有规定相应的内容,为了适配苹果设备新增的功能,还是可以适应苹果公 ...
- Liunx安装eclipse-mosquitto之docker容器
1.docker拉取 docker pull eclipse-mosquitto 2.查看镜像 docker images 3.建立配置目录 mkdir -p /mnt/mosquitto/confi ...
- C++调用Python_____用Python C API
项目需要用C++来处理用python处理的数据集,所以就需要在C++中调用python. 先介绍第一种方法,python文档中给出了python c api,可以实现C++与python的互动. 先新 ...
- SpringCloud框架开发
1.是什么微服务 是一种架构模式,他提倡将单一应用程序划分一组小的服务,服务之间的相互配合.互相协调. 2.Spring Cloud简介 SpringClound等于分布式微服务架构的一站式解决方案, ...
- Vue+Element UI一个下拉框传字典值和对应字典Label
<el-select @change="getDeptName" v-model="form.deptCode"> <el-option v- ...
- UI自动化之【maven+selenium环境搭建】
一.下载maven包 官网: http://maven.apache.org/download.cgi 二.配置maven环境变量 配置完之后验证一下:(若出现以下信息可看到maven的版本号就表示 ...
- 浙里办微信小程序总结
浙里办微信小程序单点登录流程 1.获取浙里办跳转地址中ticket或者微信小程序中的ticketId let ticket = getQueryString("ticket", w ...
- 微信小程序—标题栏
<template> <view :style="{paddingTop: statusBarHeight + 'px',background:bg}" clas ...
- JavaScript的Object.defineProperty( )方法
Object.defineProperty方法可以在一个对象上定义一个新的属性,或者修改该对象原有的属性,并返回该对象. 基础的语法格式如下: 1 var data = {}//定义一个对象 2 Ob ...
- 使用generator进行代码自动生成
在使用generator 进行逆向工程时,一下为步骤 添加mybatis generator的maven插件依赖 添加mybatis generator的配置文件:generatorConfig.xm ...