Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从字符串中提取转义字符_C#_String_Text_Escaping_Backslash - Fatal编程技术网

C#从字符串中提取转义字符

C#从字符串中提取转义字符,c#,string,text,escaping,backslash,C#,String,Text,Escaping,Backslash,我正在把一个编码的字符串读入内存并解码。 字符串类似于“test\file1.txt” 通常,C#会将其视为字符串文字“test\\file1.txt”,正确地将转义字符分配给反斜杠字符 在本例中,C#将斜杠视为f from文件的转义字符。(“\f”) 我不能使用字符串的替换(@“\”,@“\”方法,因为C#没有找到“\”,它只找到“\f”。文件名是完全可变的,因此我也不能使用替换(@“\f”,“@“\f”) 如何处理内存中的字符串并添加斜杠,使该字符串成为有效路径 字符串刚从文本文件加载并通过

我正在把一个编码的字符串读入内存并解码。 字符串类似于“test\file1.txt”

通常,C#会将其视为字符串文字“test\\file1.txt”,正确地将转义字符分配给反斜杠字符

在本例中,C#将斜杠视为f from文件的转义字符。(“\f”)

我不能使用字符串的替换(@“\”,@“\”方法,因为C#没有找到“\”,它只找到“\f”。文件名是完全可变的,因此我也不能使用替换(@“\f”,“@“\f”)

如何处理内存中的字符串并添加斜杠,使该字符串成为有效路径

字符串刚从文本文件加载并通过解码器传递。

public static string Decode(string inp)
{
    byte[] ToDecode = System.Convert.FromBase64String(inp);
    return System.Text.ASCIIEncoding.UTF8.GetString(ToDecode);
}
这是我实际使用字符串(称为“A”)的地方。

如果我通过立即检查附件的内容,结果如下:

?_AttachmentsPath + @"\" + A
"\\\\BUPC1537\\MailServer\\Attachments\\test\file2.txt"
public static string Encode(string inp)
{
    byte[] ToEncode = System.Text.ASCIIEncoding.UTF8.GetBytes(inp);
    return System.Convert.ToBase64String(ToEncode);
}

//Immediate code
?Utils.Encoder.Encode("test\file2.txt")
"dGVzdAxpbGUyLnR4dA=="
我通过立即调用以下方法(然后将数据粘贴到XML文档中)手动对字符串进行编码:

?_AttachmentsPath + @"\" + A
"\\\\BUPC1537\\MailServer\\Attachments\\test\file2.txt"
public static string Encode(string inp)
{
    byte[] ToEncode = System.Text.ASCIIEncoding.UTF8.GetBytes(inp);
    return System.Convert.ToBase64String(ToEncode);
}

//Immediate code
?Utils.Encoder.Encode("test\file2.txt")
"dGVzdAxpbGUyLnR4dA=="

正如我一直怀疑的那样,创建文件的代码没有正确地跳出反斜杠

通过使用逐字记录字符串进行修复:

Utils.Encoder.Encode(@"test\file2.txt")
或者通过显式转义反斜杠:

Utils.Encoder.Encode("test\\file2.txt")

请出示你的密码。当你解码一个字符串时,你所说的正在发生的事情不会发生。这里一定还有别的事。最有可能的是,字符串已经被错误地写入文件。我仍然可以确定字符串被错误地保留到文件中。该文件来自何处?如您所见,“f”之前的“\”没有被删除,因此实际上只有一个字符:“\f”。你需要证实你为什么有这种行为。@Recipe:请理解你所说的不是真的。这不是解码错误,也不是Base64错误。错误在于编码字符串或将其写入文件之前创建字符串的代码。很可能,在创建示例文件时,您忘记了字符串部分前面的
@
。请显示用于创建该文件的确切代码。如果您执行
var test=@“test\file2.txt”然后求值
test==Encoding.UTF8.GetString(Convert.FromBase64String(Convert.ToBase64String(Convert.ToBase64String(Encoding.UTF8.GetBytes(test)))
你会发现它的计算结果是
真的
。事实上,你会发现它的计算结果是真的,无论你在
测试中使用什么值。我马上就去试试!编辑:犯了多大的错误……非常感谢Daniel Hilgart。