C#如何保存含转义字符的字符串且不转换转义字符?
解决方法
要保留字符串中转义字符的字面形式(比如把实际的换行符保存成\n而非实际换行),你需要先将字符串中的控制字符转换为对应的字面转义序列,再写入文件。
1. 实现转义方法
编写一个方法,将字符串中的控制字符(如\n、\t)替换为字面的转义字符串:
private static string EscapeString(string input) { if (string.IsNullOrEmpty(input)) return input; var sb = new StringBuilder(); foreach (char c in input) { switch (c) { case '\n': sb.Append(@"\n"); break; case '\t': sb.Append(@"\t"); break; case '\a': sb.Append(@"\a"); break; case '\\': sb.Append(@"\\"); break; // 可按需添加更多控制字符的转义,比如\r、\b等 default: sb.Append(c); break; } } return sb.ToString(); }
2. 修改写入文件的代码
遍历字典时,对每个键和值先执行转义,再写入文件:
using (var fs = new FileStream(path, FileMode.Truncate)) { using (var sw = new StreamWriter(fs)) { foreach (var kvp in texts) { string escapedKey = EscapeString(kvp.Key); string escapedValue = EscapeString(kvp.Value); sw.WriteLine($"{escapedKey};{escapedValue}"); } } }
为什么之前的方法无效?
你之前用Replace(@"\", "|")没有效果,是因为字符串中的\n是实际的换行符(单个字符),并非\加n两个字符,所以找不到需要替换的\。而上面的方法直接识别控制字符,将其转换为对应的字面转义序列。
配合你现有的ToNormal方法,写入时用EscapeString转义,读取时用ToNormal还原,就能完整保存和恢复带转义字符的字符串。
内容的提问来源于stack exchange,提问作者RadarDev
相关产品推荐
相关产品推荐

