特殊字符在XML序列化中的转义

momo314相同方式共享非商业用途署名转载

案发现场还原:

很久很久以前,有一个序列化功能:

var Demo1 = new
{
    Name = "My Name",
    Description = "Description line 1;\nDescription line 2;"
};
Console.WriteLine(new JavaScriptSerializer().Serialize(Demo1));
/*
* 结果显而易见
* {"Name":"My Name","Description":"Description line 1;\nDescription line 2;"}
*/

可是,平静而美好的日子总是过的很快,突然有一天:

产品狗:猿,过来,这里有一个崭新的需求:我们需要把这个描述改成可配置的,因为要随时修改的呀! 程序猿:好吧,看起来应该还算好改,10分钟给你搞定!

<appSettings>
  <add key="Description" value="Description line 1;\nDescription line 2;"/>
</appSettings>
var Demo1 = new
{
    Name = "My Name",
    Description = ConfigurationManager.AppSettings["Description"] ?? string.Empty
};
Console.WriteLine(new JavaScriptSerializer().Serialize(Demo1));

程序猿:改完收工思密达!

谁知,世事总是不如人意(然而测试喵早就看穿了一切)

测试喵:等等走!你这个不行呀,不是该换行的吗,\\n又是什么鬼!

{"Name":"My Name","Description":"Description line 1;\\nDescription line 2;"}

程序猿定睛一看:哼~我一瞅就知道是转义字符搞的鬼 程序猿:噢,没事,这个好改,2分钟,大师兄给你捉妖~~

一分钟过去了。。。 十分钟过去了。。。 半小时过去了。。。

程序猿(纠结的): WHAT THE F**K!没记错的话,XML跟HTML是使用一样的转义序列的呀,什么&呀,<啊、 >神马的都挺常用的,可是。。。可是。。。换行符什么的,完全没用过啊,HTML里面用的是``````呀。。。

伤不起啊思密达,海螺海螺,快救我!!!

神奇海螺(如同救世主一般的): 我听说转义序列这个东西,除了字符转义序列,貌似还有一种叫做数字转义序列的东西呢。。。

<appSettings>
  <add key="Description" value="Description line 1;&#x000A;Description line 2;"/>
</appSettings>

Bingo!搞定!神奇海螺万万岁!!!

另: 因为貌似Tab和换行符不能在HTML中使用字符转义序列来转义 因为我没见过Tab和换行符怎样在HTML中使用字符转义序列来转义, 随本案附送Tab和换行符的数字转义序列对应表,以作为大海螺神教入教礼物:

字符名称 转义序列
\t &#x0009;
\n &#x000A;
✎﹏ 本文来自于 momo314和他们家的猫,文章原创,转载请注明作者并保留原文链接。