通过忽略转义字符来获取char

时间:2017-03-09 17:13:35

标签: c# .net string escaping ascii

给出这个例子:

var myString = "foo\rbar";
var myChar = myString[3];
var myCharCode = (int) myChar;

我想获取CharCode 92(\)而不是13(\r)。

我怎样才能做到这一点?像这些线条的东西感觉不对:

myString = myString.Replace("\r", "\\r");
myString = myString.Replace("\n", "\\n");
//Repeat for every possible escape sequence

完整背景:

我无法更改myString因为我是从旧版VB6应用程序的数据库中获取的。在VB6中,\r被视为单独的字符。在.NET中,它们被视为ASCI 13。

也许 VB6 将其正确保存到数据库中。但是它正确地将它读回VB6客户端。

2 个答案:

答案 0 :(得分:0)

在您给出的示例中,您只需要告诉字符串不要将反斜杠视为转义字符。在C#中,您可以将@添加到字符串中。

var myString = @"foo\rbar";
var myChar = myString[3];
var myCharCode = (int)myChar;
Console.WriteLine(myCharCode);

但是,如果你说过从数据库中读取这些内容,我不确定这个答案是否足以满足你的需求 - 但这对你的问题是正确的。如果你只是从数据库中读取它,并且你得到一个(char)13那么它就是因为它被保存在数据库中......

答案 1 :(得分:0)

字符串转义在代码中的字符串文字中起作用。您需要使用\\在字符串中包含单个\

var myString = "foo\\rbar";

此外,您可以将@字符用于非转义字符串:

var myString = @"foo\rbar";

此处提供更多信息:https://msdn.microsoft.com/en-us/library/362314fe.aspx

UPD:

如果要将应用程序从VB6移植到C#,则需要转义字符串文字中的特殊字符。 foo\rbar在VB6和C#代码中有不同的表示形式。