【发布时间】:2011-08-09 12:02:35
【问题描述】:
我需要从流中读取第一行以确定文件的编码,然后使用该编码重新创建流
以下代码无法正常工作:
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);
【问题讨论】: