如何解决未识别转义序列问题?附字符串截取代码及目标数据
解决C#中字符串未识别转义序列的问题
首先,咱们先搞清楚报错的根源:C#里的字符串反斜杠\是转义字符,它会把后面的字符解析成特殊含义(比如\n是换行、\t是制表符),或者用来表示Unicode字符(\uXXXX格式,必须跟四位十六进制数)。你的目标字符串里有\u0001、\b、\u0006这类内容,要么是你想保留\作为字面量字符,要么是某些转义写法不符合C#的规则,才会触发“未识别转义序列”错误。
下面给你两种针对性的解决方案:
方案1:使用逐字字符串(最省心)
在字符串前面加@前缀,这样C#会把字符串里的所有字符都当作字面量,不会解析反斜杠为转义符(唯一例外是双引号需要写成"")。
比如你的目标字符串可以这么定义:
string targetStr = @"FHTT-04ce1068 GP\u0001\u001b10001182-2100113j6J2-FTTH\b\u0006??0?-\u0006";
这样所有的\都会被原封不动保留,不会触发转义错误,直接就能传入你的getBetween方法使用。
方案2:手动转义每个反斜杠
把字符串里的每个\替换成\\,C#会将\\解析为一个字面量的\字符。
示例代码:
string targetStr = "FHTT-04ce1068 GP\\u0001\\u001b10001182-2100113j6J2-FTTH\\b\\u0006??0?-\\u0006";
这种方式适合你需要精准控制转义内容的场景,但如果字符串很长会比较麻烦。
额外注意:如果是要表示实际的Unicode控制字符
如果你的目标字符串里的\u0001、\u0006是实际的Unicode控制字符(而不是字面量的\u0001文本),那你需要确保写法符合C#规则:
\u后面必须跟四位十六进制数(比如\u0001、\u001b是正确的,\u06会报错,需要补成\u0006)- C#支持的特殊转义符(比如
\b表示退格符)可以直接使用
比如正确的Unicode控制字符写法:
string targetStr = "FHTT-04ce1068 GP\u0001\u001b10001182-2100113j6J2-FTTH\b\u0006??0?-\u0006";
这里的\u0001会被解析为ASCII控制字符SOH,\b是退格符,不会触发错误。
结合你的方法使用示例
把目标字符串定义好后,直接调用你的getBetween方法即可:
// 你的截取方法 public static string getBetween(string strSource, string strStart, string strEnd) { int Start, End; if (strSource.Contains(strStart) && strSource.Contains(strEnd)) { Start = strSource.IndexOf(strStart, 0) + strStart.Length; End = strSource.IndexOf(strEnd, Start); return strSource.Substring(Start, End - Start); } else { return ""; } } // 定义目标字符串(这里用逐字字符串示例) string target = @"FHTT-04ce1068 GP\u0001\u001b10001182-2100113j6J2-FTTH\b\u0006??0?-\u0006"; // 假设截取GP到FTTH之间的内容 string result = getBetween(target, "GP", "FTTH"); Console.WriteLine(result); // 输出:\u0001\u001b10001182-2100113j6J2-
内容的提问来源于stack exchange,提问作者stack stack
相关产品推荐
相关产品推荐

