111,094
社区成员




// 发现一个更简单的方法:System.Text.RegularExpressions.Regex.Unescape()
class Test
{
static void Main()
{
string str = @"\x41 B C \r\n\u5f00\u53d1\u8bed\u8a00aa";
string str1 = System.Text.RegularExpressions.Regex.Unescape(str);
System.Console.WriteLine("[{0}] -> [{1}]", str, str1);
}
}
/* 程序输出:
[\x41 B C \r\n\u5f00\u53d1\u8bed\u8a00aa] -> [A B C
开发语言aa]
*/
using System;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
class Test
{
static void Main()
{
string s = @"\x41 B C \u5f00\u53d1\r\n\""换行\""\x8bed\u8a00aa";
string str1 = Convert(s);
Console.WriteLine("[{0}] -> [{1}]", s, str1);
}
static string Convert(string s)
{
return (new MyString(s)).Parse();
}
}
sealed class MyString
{
object instance;
MethodInfo method;
public MyString(string s)
{
string code = string.Format("sealed class MyString{{public string Parse(){{return \"{0}\";}}}}", s);
CompilerParameters p = new CompilerParameters();
p.GenerateInMemory = true;
CompilerResults cr = new CSharpCodeProvider().CompileAssemblyFromSource(p, code);
instance = cr.CompiledAssembly.CreateInstance("MyString");
method = instance.GetType().GetMethod("Parse");
}
public string Parse()
{
return (string)method.Invoke(instance, null);
}
}
/* 程序输出:
[\x41 B C \u5f00\u53d1\r\n\"换行\"\x8bed\u8a00aa] -> [A B C 开发
"换行"语言aa]
*/
using System;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
class Test
{
static void Main()
{
string str = @"\u5f00\u53d1\r\n\""换行\""\x8bed\u8a00";
string str1 = Convert(str);
Console.WriteLine("[{0}] -> [{1}]", str, str1);
}
static string Convert(string s)
{
return (new MyString(s)).Parse();
}
}
sealed class MyString
{
object instance;
MethodInfo method;
public MyString(string expression)
{
string className = "MyString";
string methodName = "Parse";
string code = string.Format("using System;sealed class {0}{{public string {1}(){{return \"{2}\";}}}}",
className, methodName, expression);
CompilerParameters p = new CompilerParameters();
p.GenerateInMemory = true;
CompilerResults cr = new CSharpCodeProvider().CompileAssemblyFromSource(p, code);
if(cr.Errors.Count > 0)
{
string msg = "MyString(\"" + expression + "\"): \n";
foreach (CompilerError err in cr.Errors) msg += err.ToString() + "\n";
throw new Exception(msg);
}
instance = cr.CompiledAssembly.CreateInstance(className);
method = instance.GetType().GetMethod(methodName);
}
public string Parse()
{
return (string)method.Invoke(instance, null);
}
}
/* 程序输出:
[\u5f00\u53d1\r\n\"换行\"\x8bed\u8a00] -> [开发
"换行"语言]
*/
using System;
class Test
{
static void Main()
{
string str = "\\u5f00\\u53d1\\u8bed\\u8a00";
string str1 = Convert(str);
Console.WriteLine("[{0}] -> [{1}]", str, str1);
}
static string Convert(string s)
{
return "\u5f00\u53d1\u8bed\u8a00";
}
}
/* 程序输出:
[\u5f00\u53d1\u8bed\u8a00] -> [开发语言]
*/