流读取器可能的编码问题

本文关键字:编码 问题 读取 | 更新日期: 2023-09-27 18:30:50

我在使用 StreamReader 读取 C# 中的文件时遇到问题。我有一个 UTF-8 编码的文件。对于示例,我将将其简化为一行。单行中有一个换行符。我正在使用 UTF-8 编码进行阅读,但是一旦读取字符串,它似乎没有正确处理换行符。让我举个例子

using (StreamReader sr = new StreamReader(file, Encoding.UTF8))
{
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        Debug.WriteLine("test1'ntest2" + " - " + "test1'ntest2".GetHashCode());
        Debug.WriteLine(line + " - " + line.GetHashCode());
    }
}

这是文件的内容

test1'ntest2

这是此代码的输出

test1
test2 - -61586127
test1'ntest2 - -228288099

在从字符串文本打印的行中,它在打印时将 ' 视为换行符。当它打印从文件中读取的行时,它不会这样做。您还可以看到哈希代码值不同。

流读取器可能的编码问题

文件内容错误。在 C# 中使用文本字符串时,前缀为 ' 的字符被视为特殊字符(例如 'n用于换行符,'r用于回车,'t用于制表符等)。这称为转义,'是转义字符。'序列和一些附加字符会在字符串中生成最后一个字符。

而在文件内容中,有实际的两个字符('n),它们被视为实际字符而不是特殊字符。因此,在您的文件中,您实际上需要在从流中读取后输入换行符或将'n替换为实际的 C# 'n