StreamReader可能的编码问题

时间:2016-01-18 22:46:20

标签: c# encoding utf-8 streamreader

使用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视为换行符。当它打印从文件读取的行时,它不会这样做。您还可以看到哈希码值不同。

1 个答案:

答案 0 :(得分:1)

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

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