给出这个例子:
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客户端。
答案 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#代码中有不同的表示形式。