Ale*_*lex 3 c# stream readline
我需要从流中读取第一行以确定文件的编码,然后使用该编码重新创建流
以下代码无法正常工作:
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();
Run Code Online (Sandbox Code Playgroud)
文本变量不包含整个文本.出于某种原因,跳过第一行和后面的几行.
我尝试了一切:关闭StreamReader,重置它,调用一个单独的GetResponseStream ......但没有任何效果.
我无法再次获得响应流,因为我从互联网上获取此文件,再次重新加载它将是糟糕的性能.
更新
以下是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""?>"));
Run Code Online (Sandbox Code Playgroud)
**更新2**
我正在使用XML文件,文本变量被解析为XML:
var feedItems = XElement.Parse(text);
Run Code Online (Sandbox Code Playgroud)
那么你要求它检测编码......这需要它来读取数据.这是从底层流中读取它,然后您在StreamReader同一个流周围创建另一个流.
我建议你:
MemoryStream)StreamReader)MemoryStream围绕字节数组,并StreamReader围绕它目前还不清楚你的GetEncodingFromFirstLine方法做了什么......或者这个文件究竟是什么.更多信息可以帮助您更轻松.
编辑:如果这是加载一些XML,不要重新发明轮子.只需将流提供给现有的XML解析类之一,它将为您执行适当的检测.
| 归档时间: |
|
| 查看次数: |
6420 次 |
| 最近记录: |