【发布时间】:2017-03-09 17:13:35
【问题描述】:
举个例子:
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 客户端。
【问题讨论】:
-
您是否尝试过以
char[]的身份从数据库中获取数据? -
我正在使用实体框架(DbFirst),我认为这是不可能的@AlessandroD'Andria
-
@ChristianGollhardt 这不仅仅是可能的 - 这是默认行为!如果我有一个字符串
char 92 + char 114,将其保存到数据库中,然后将其读回,我将返回char 92 + char 114。我不会回复char 13,因为那不是我保存到数据库中的内容... -
"在 .NET 中,它们被视为 ASCII 13。"这是不正确的。 仅在 C# 中是正确的,作为 literal 字符串。 我认为您的实验表明
'\u000d'确实是从数据库返回的。 VB6 客户端必须执行与您在 C# 中执行的 .Replace 等效的操作。以这种方式序列化字符串数据有点奇怪。你确定需要吗?
标签: c# .net string escaping ascii