gpt4 book ai didi

C#:如何从流中读取一行然后从头开始读取?

转载 作者:行者123 更新时间:2023-11-30 13:50:15 25 4
gpt4 key购买 nike

我需要从流中读取第一行以确定文件的编码,然后使用该编码重新创建流

以下代码不能正常工作:

var r = response.GetResponseStream();
var sr = new StreamReader(r);
string firstLine = sr.ReadLine();
string encoding = GetEncodingFromFirstLine(firstLine);
string text = new StreamReader(r, Encoding.GetEncoding(encoding)).ReadToEnd();

文本变量不包含整个文本。由于某种原因,第一行和后面的几行被跳过。

我尝试了所有方法:关闭 StreamReader、重置它、调用单独的 GetResponseStream...但没有任何效果。

我无法再次获得响应流,因为我正在从 Internet 获取此文件,再次重新下载它会降低性能。

更新

这是 GetEncodingFromFirstLine() 的样子:

public static string GetEncodingFromFirstLine(string line)
{
int encodingIndex = line.IndexOf("encoding=");
if (encodingIndex == -1)
{
return "utf-8";
}
return line.Substring(encodingIndex + "encoding=".Length).Replace("\"", "").Replace("'", "").Replace("?", "").Replace(">", "");
}

...

// true
Assert.AreEqual("windows-1251", GetEncodingFromFirstLine(@"<?xml version=""1.0"" encoding=""windows-1251""?>"));

** 更新 2 **

我正在处理 XML 文件,文本变量被解析为 XML:

var feedItems = XElement.Parse(text);

最佳答案

好吧,您要求它检测 编码……这需要它读取数据。这是从底层流中读取它,然后您围绕同一流创建另一个 StreamReader

我建议你:

  • 获取响应流
  • 检索所有数据到字节数组(或MemoryStream)
  • 检测编码(应该在字节上执行,而不是文本 - 目前您已经通过创建StreamReader 假设UTF-8>)
  • 围绕字节数组创建一个MemoryStream,并围绕它创建一个StreamReader

不清楚您的 GetEncodingFromFirstLine 方法的作用...或者这个文件到底是什么。更多信息可能更容易为您提供帮助。

编辑:如果这是为了加载一些 XML,请不要重新发明轮子。只需将流提供给现有的 XML 解析类之一,它将为您执行适当的检测。

关于C#:如何从流中读取一行然后从头开始读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6995871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com