Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Filestream在读取时预先添加垃圾字符_C#_Filestream - Fatal编程技术网

C# Filestream在读取时预先添加垃圾字符

C# Filestream在读取时预先添加垃圾字符,c#,filestream,C#,Filestream,我正在阅读一个简单的文本文件,其中包含使用filestream类的单行。但看起来filestream.read在开始时预先添加了一些垃圾字符 下面是代码 using (var _fs = File.Open(_idFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) { byte[] b = new byte[_fs.Length]; UTF8Encoding temp = new UTF8Encodi

我正在阅读一个简单的文本文件,其中包含使用filestream类的单行。但看起来filestream.read在开始时预先添加了一些垃圾字符

下面是代码

using (var _fs = File.Open(_idFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
{
     byte[] b = new byte[_fs.Length];
     UTF8Encoding temp = new UTF8Encoding(true);
     while (_fs.Read(b, 0, b.Length) > 0)
     {
         Console.WriteLine(temp.GetString(b));
         Console.WriteLine(ASCIIEncoding.ASCII.GetString(b));


     }
 }
例如:我的文本文件中的数据只是“示例”。但是上面的代码返回

  "?sample" and
  "???sample"

原因是什么??它是文件指示器的开始吗?是否有办法只读取我的实际内容???

可以是BOM-也称为字节顺序标记。

由Unicode字符0xFEFF组成,用于标记使用编码的文件

因此,如果您正确地将文件解码为UTF8,则会将该字符作为字符串的第一个字符。如果错误地将其解码为ANSI,则会得到3个字符,因为0xFEFF的UTF8编码是3个字节的字节序列“EF BB BF”

但是您的整个代码可以替换为

File.ReadAllText(fileName,Encoding.UTF8)

这也会删除BOM表。或者省略编码参数,让函数自动检测编码(它使用BOM)

您正在从流中读取BOM。如果您正在阅读文本,请尝试使用
StreamReader
,它将自动处理此问题。

请尝试

using (StreamReader sr = new StreamReader(File.Open(path),Encoding.UTF8))

它肯定会将BOM剥离给您

我的文本文件中的数据只是“sample”@CodeInChaos,感谢您的提示,在十六进制编辑中它看起来是“ef bb bf 73 61 6d 70 6c 65 00和…sample”。为什么……如果你需要剥离BOM表,你已经做错了。看见