【发布时间】:2016-01-18 22:46:20
【问题描述】:
我在使用 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 视为换行符。当它打印从文件中读取的行时,它不会这样做。还可以看到哈希码值不同。
【问题讨论】:
-
不一样的!在文件内容中,“\n”是一个文本,在 c# 代码中,“\n”是一个换行符,因为字符“\”是一个转义字符,它告诉编译器下面的字符是“特殊的”。如果使用“\t”,则表示制表符
-
“\n”是文件的实际内容(例如,'\' 的 ascii 码 92,'n' 的 ascii 码 110)还是换行符 0x0A?
-
您的文件中是否实际写入了“\n”(反斜杠和字母 n),或者它是换行符,而您只是这样显示它?是编译器将字符串中的“\n”等特殊转义序列转换为换行符。当从文件中读取这样一个序列时,它只是“反斜杠和字母n”,不会自动转换为换行符。
标签: c# encoding utf-8 streamreader