我正在做一个学校项目,任务是创建一个应用程序,其中一个功能是将多行文本(用户输入)保存到字符串中。我知道代码的某些部分可能已经过时,但我们学校编译器仅支持.NET版本4(编辑:我在Visual Studio 2022中编译,学校编译器只是我们展示最终作品的地方,这就是为什么版本是已完成作品的限制)。我仍在学习,我确信还有其他可以改进的地方,但让我们看看主要问题。
当用户输入标准捷克语文本(例如“včera”,意思是昨天)时,保存并稍后返回的文本显示“vera”。如果我只输入这些特殊字符,例如“ůčšěž”,它没有任何意义,则字符串内容将为空。 当我使用不同的方法创建字符串时,例如基本的
Console.WriteLine()
,特殊字符会被保存。
我使用的方法应该接受用户输入,并将多行文本与 DateTime 一起提供给双向链表内的对象 Record。下面,我将展示相关代码,因为错误可能会在途中产生。
public static void CreateNewRecord()
{
Console.Write("Date: ");
if (DateTime.TryParse(Console.ReadLine(), out DateTime parsedDate))
{
Console.WriteLine("\nText: ");
StringBuilder sb = new StringBuilder();
while (true)
{
string textLine = Console.ReadLine();
if (textLine.ToLower() == "save")
break;
sb.AppendLine(textLine);
}
string recordText = sb.ToString();
Program.records.AddLast(new Record(parsedDate, recordText));
}
else
{
Console.WriteLine("Wrong date format.");
}
}
这将创建记录并使用重写的 ToString(),我正在尝试读取它:
public override string ToString()
{
return string.Format("Date: {0}\n\n{1}", Date, Text);
}
但是,当尝试使用
Console.WriteLine(records.Last());
读取内容时,仅返回英文字母文本。
如果有人知道出了什么问题,我们将欢迎您的回答。
我尝试将 UTF-8 编码添加到程序顶部,但这没有帮助。我尝试创建一个非常简单的字符串生成器,它附加部分文本(而不是整行),即使带有特殊字符,它也会返回。
我希望返回多行文本,其中包含用户保存到其中的所有符号。
帮助您正确处理特殊字符:
Console.OutputEncoding = Encoding.UTF8;
Console.InputEncoding = Encoding.UTF8;
public static void CreateNewRecord()
{
Console.Write("Date: ");
if (DateTime.TryParse(Console.ReadLine(), out DateTime parsedDate))
{
Console.WriteLine("\nText: ");
StringBuilder sb = new StringBuilder();
while (true)
{
string textLine = Console.ReadLine();
if (textLine.ToLower() == "save")
break;
sb.AppendLine(textLine);
}
string recordText = sb.ToString();
Program.records.AddLast(new Record(parsedDate, recordText));
}
else
{
Console.WriteLine("Wrong date format.");
}
}