C# basestream.seek显示?
我有一个名为message.txt的文本文件,其中有“abcdef”作为文本 现在,代码输出如下: a如果使用偏移量0进行搜索 ?如果使用偏移量1或2进行搜索 a(再次)如果我使用偏移量3进行搜索 b如果我使用偏移量4进行搜索 c如果使用偏移量5进行搜索 等等C# basestream.seek显示?,c#,C#,我有一个名为message.txt的文本文件,其中有“abcdef”作为文本 现在,代码输出如下: a如果使用偏移量0进行搜索 ?如果使用偏移量1或2进行搜索 a(再次)如果我使用偏移量3进行搜索 b如果我使用偏移量4进行搜索 c如果使用偏移量5进行搜索 等等 static void Main(string[] args) { StreamReader sr = new StreamReader("Message.txt"); sr.BaseStream.
static void Main(string[] args)
{
StreamReader sr = new StreamReader("Message.txt");
sr.BaseStream.Seek(2, SeekOrigin.Begin);
Console.WriteLine((char)sr.Read());
}
问题:
从偏移量3开始,其行为与预期一致。但理想情况下,从偏移量1开始的输出应该是相同的。因此
Q1.为什么偏移量为0和3时会出现相同的输出a
为什么我会得到a?对于偏移量1和偏移量2
谢谢您的文件开头有BOM表。字节顺序标记,unicode头
在某个十六进制编辑器中查看您的文件。(重命名为.bin并在Visual Studio中打开)。此特定BOM表告诉计算机这是一个UTF-8文件。这里有三个可能的因素:
- 编码:在大多数编码中,字节!=字符
- 缓冲区:如果您
基流,您必须告诉读取器删除它可能拥有的任何缓冲区,否则它会变得非常混乱;要执行此调用查找
sr.discardeBufferedData()
- 文件开头的字节顺序标记