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