【问题标题】:StreamReader.ReadToEnd reading differently second time aroundStreamReader.ReadToEnd 第二次读取不同
【发布时间】:2012-03-18 09:52:45
【问题描述】:

我需要从同一个流中读取两次。问题是我第二次得到不同的字符串。 这是缩短的代码:

using(StreamReader sr = new StreamReader(filePath))
{
    string string1  = sr.ReadToEnd();
    sr.BaseStream.Position = 0;
    sr.DiscardBufferedData();   
    string string2 = sr.ReadToEnd();
    bool sameSame = string1 == string2; // false!
}

字符串看起来相同,但使用十六进制编辑器检查我可以看到值不同。这是什么原因造成的,我该如何解决?

更新

字符串1

字符串2

由于某种原因 string1 有一个 '--'。

【问题讨论】:

  • 你是什么意思:“用十六进制编辑器检查”?
  • 你看到了什么不同?长度?内容?
  • 我比较了 edithex.com 的 string1 和 string2。这些字符产生不同的十六进制值。
  • 它在哪里显示差异?我想知道这是否与 BOM 相关......另外;最初是流吗?注意:您应该避免需要重新读取流。
  • 在那个工具中“--”是指“00”吗?

标签: c# stream streamreader


【解决方案1】:

这是字节顺序标记的问题,一个肮脏的解决方法是跳过前三个字节:

sr.BaseStream.Position = 3;

但正确的方法是创建一个新的 StreamReader。

【讨论】:

  • 恕我直言,字节顺序标记在不同的编码中可以有不同的长度。另外,我认为它有两个字节长?
  • 这取决于编码。 en.wikipedia.org/wiki/…
  • 嗯,这就是我称之为“脏”的原因。希望 Malako 选择了第二种选择……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
相关资源
最近更新 更多