StreamReader 可能的编码问题

StreamReader possible encoding issues

我在使用 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

在从字符串文字打印的行中,它在打印时将 \n 视为换行符。当它打印从文件中读取的行时,它不会这样做。也可以看到哈希码值不一样

你的文件内容有误。在 C# 中,当使用文字字符串时,前缀为 \ 的字符被视为特殊字符(例如,\n 表示换行符,\r 表示回车符 return,\t 表示制表符, ETC。)。这称为转义,\ 是转义字符。 \ 和一些附加字符的序列导致字符串中的最后一个字符。

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