我对C#中字符串的所有不同转义机制感到困惑。我想要的是一种逃避/失败的方法:
1)可用于任何字符串
2)escape + unescape保证返回初始字符串
3)用其他东西替换所有标点符号。如果要求太多,那么至少要逗号,大括号和@。没有逃脱的空间我很好
4)不太可能改变。
它存在吗?
编辑:这是为了对应用程序生成的属性进行seriliazing和反序列化。所以我的对象可能有也可能没有Attribute1,Attribute2,Attribute3等的值。简化一点,想法是做类似下面的事情。目标是使编码的集合简洁并且或多或少是人类可读的。
我在问Escape和Unescape使用哪些方法有意义。
public abstract class GenericAttribute {
const string key1 = "KEY1"; //It is fine to put some restrictions on the keys, i.e. no punctuation
const string key2 = "KEY2";
public abstract string Encode(); // NO RESTRICTIONS ON WHAT ENCODE MIGHT RETURN
public static GenericAttribute FromKeyValuePair (string key, string value) {
switch (key) {
case key1: return new ConcreteAttribute1(value);
case key2: return new ConcreteAttribute2(value);
// etc.
}
}
}
public class AttributeCollection {
Dictionary <string, GenericAttribute> Content {get;set;}
public string Encode() {
string r = "";
bool first = true;
foreach (KeyValuePair<string, GenericAttribute> pair in this.Content) {
if (first) {
first = false;
} else {
r+=",";
}
r+=(pair.Key + "=" + Escape(pair.Value.Encode()));
}
return r;
}
public AttributeCollection(string encodedCollection) {
// input string is the return value of the Encode method
this.Content = new Dictionary<string, GenericAttribute>();
string[] array = encodedCollection.Split(',');
foreach(string component in array) {
int equalsIndex = component.IndexOf('=');
string key = component.Substring(0, equalsIndex);
string value = component.Substring(equalsIndex+1);
GenericAttribute attribute = GenericAttribute.FromKeyValuePair(key, Unescape(value));
this.Content[key]=attribute;
}
}
}
答案 0 :(得分:0)
我不完全确定你的要求,但我相信你的意图是将逃脱的角色包括在内,即使逃跑也是如此。
var content = @"\'Hello";
Console.WriteLine(content);
// Output:
\'Hello
通过使用@
,它将包含所述转义,使其与string
分开。对于带有C#的服务器端来说,只考虑其他语言和转义格式,你才会知道。
你可以在这里找到关于C#转义的一些很好的信息:
答案 1 :(得分:0)