You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决未识别转义序列问题?附字符串截取代码及目标数据

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:45:03