C# .NET中StringBuilder.AppendLine无法保存非英文字符的问题
问题解决:捷克语特殊字符在控制台输入中丢失
问题根源
.NET 4环境下,控制台默认的输入/输出编码不支持捷克语特殊字符(如č、š、ž、ů等),导致Console.ReadLine()读取时错误解析这些字符,最终出现字符丢失或内容为空的情况。
解决方案
在程序启动的Main方法开头,设置控制台的输入和输出编码为支持捷克语的编码,推荐两种方式:
方式1:使用Windows-1250编码(中欧语言专用)
using System; using System.Text; namespace YourProject { class Program { static void Main(string[] args) { // 配置控制台编码,适配捷克语特殊字符 Console.InputEncoding = Encoding.GetEncoding(1250); Console.OutputEncoding = Encoding.GetEncoding(1250); // 后续业务代码 CreateNewRecord(); } // 你的CreateNewRecord方法保持不变 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."); } } } }
方式2:使用UTF-8编码
如果控制台环境支持UTF-8(部分现代控制台或配置后兼容),也可以用以下设置:
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8;
原理说明
Console.ReadLine()默认采用系统OEM编码解析输入(如美国地区为CP437),这类编码不包含捷克语特殊字符的映射,导致读取时字符被错误替换或丢弃。- 切换到Windows-1250或UTF-8后,输入的特殊字符会被正确读取、存储,后续通过
ToString()输出时也能正常显示。
验证效果
设置编码后,输入včera或ůčšěž,执行Console.WriteLine(records.Last());即可看到完整的特殊字符内容,不会出现丢失或为空的问题。
内容的提问来源于stack exchange,提问作者Lamecode0
相关产品推荐
相关产品推荐

