.txt 文件中未读取特殊字符

Posted

技术标签:

【中文标题】.txt 文件中未读取特殊字符【英文标题】:Special character not reading in .txt file 【发布时间】:2017-10-02 08:15:36 【问题描述】:

我正在使用流阅读器来读取文本文件。

这是 .txt 文件的内容:

</a> Schools's are a suitable public </a>

当我读到那篇文章时,我得到了:

<a>Schoolss are a suitable public<a>

如您所见,我没有收到报价单。如何在流阅读器中接收特殊字符?

我使用了以下代码:

using (StreamReader reader = new StreamReader(CommonGetSet.FileName, System.Text.Encoding.ASCII))

    string text = reader.ReadToEnd();
    docKeyword = XDocument.Parse(text);

【问题讨论】:

如果是文本格式,为什么要加载成xml格式? How to read an entire file to a string using C#?的可能重复 “特殊字符”是什么意思?什么是错误如果文件不包含 XML,为什么要使用 XDocument.Load?没有信息就无法提供帮助 如果要读取文本文件,请使用File.ReadAllText。此方法可以通过检查大多数 Unicode 文件前面的 BOM 字符来检测编码 ' 是 XML 中的特殊字符。请参阅***.com/questions/1091945/…,了解您在将此内容解析为 XML 时遇到问题的原因。 【参考方案1】:

您遇到的问题是您正在尝试使用 xml 阅读器加载文本文件,即这部分:

XDocument.Load(reader);

如果您查看这个问题:What characters do I need to escape in XML documents?,您会看到其他将被剥离/也需要转义的字符。

如果您在调试器中检查StreamReader,您将看到它显示正确的文本,answer by @JinsPeter 显示的内容。所以你需要读入一个文本文件,最简单的方法是使用File.ReadAllTextFile.ReadAllLines,具体取决于你是否希望结果分别为stringstring[]

string contents = File.ReadAllText(path);
string[] lines = File.ReadAllLines(path);

但是,如果出于某种原因您真的想使用StreamReader,您可以使用ReadToEndReadLine 或任何其他适当的读取方法直接从流中读取:

using (StreamReader reader = new StreamReader(path))

    string contents = reader.ReadToEnd();

但是,请注意StreamReader 方法将从流中的当前位置读取,因此您可能需要自己设置位置。

有关在 C# 中读取文件的其他方法的列表,请参阅此问题:How to read an entire file to a string using C#?。

【讨论】:

很好的答案,但我注意到虽然它处理了为什么这不起作用的问题,但可能值得一提的是,解决方案可能是修复正在读取的文件而不是更改代码.编辑表明它可能是 XML(尽管如果这意味着 XML 并且是 OP 所拥有的,那么还有许多其他问题)。当然,我现在已经在 cmets 中提到了它,因此您不必再将其添加到答案中。 :) @Chris 我同意但是,由于 OP 已更改文件内容一次,我相信我们可能仍然没有完整的文件。在那种情况下,猜测没有意义,我只会回答提出的问题,为什么我在 .txt 文件中读取的方式不起作用? 是的。并不是要说您的答案是错误的,只是有两种可能性是错误的,一种是他们错误地读取了文本文件,另一种是他们的 xml 文件无效。他们谈论它是一个文本文件的事实确实表明您专注于这一点是正确的。【参考方案2】:

当我在 StreamReader 中打印相同的文本时,我得到了 ' 。 所以问题在于将其写入 XML 或 html。尝试解决这个问题,而不是在 StreamReader 中查找问题。

using (StreamReader inputStream = new StreamReader(filepath, System.Text.Encoding.UTF8))

    string line = inputStream.ReadToEnd();
    Console.WriteLine(line);

【讨论】:

因为是 XDocument 即 xml 剥离 ' 而不是 StreamReader OP 正在尝试使用 XML 阅读器读取文本。 这个 答案是将其作为文本阅读,这就是它起作用的原因。 OP 应该使用XDocument 否 她已正确读取文件。她正在阅读的字符串将包含完整的内容,包括 '.所以问题在于将其写入 XML 或 HMTL。不管是什么。

以上是关于.txt 文件中未读取特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

python怎么读取文件名中包含特殊字符的文件 比如xiân.txt

如何在python中读取带有特殊字符的文本文件

json 响应中的特殊字符在 IE 中未解析

如何用java读取文件并统计文件的大小写字母,数字,特殊字符的个数

如何使用 Python 从 txt 文件中删除特殊字符

python实现readline去掉换行符 等特殊字符