在我们的应用程序中,我们有一个简单的DevExpress文本编辑字段,它绑定到名为ProjectInfo的类的字符串属性信息:
<ViewBase xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
... some more declarations>
<dxe:TextEdit Text="{Binding ProjectInfo.ConstructionProjects, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Stretch"/>
...
</ViewBase>
ProjectInfo类:
public class ProjectInfo : ModelBase
{
...
[XmlAttribute]
public string ConstructionProjects{ get; set; }
...
}
在处理项目时,ProjectInfo保存在Session类中,并且在调用save函数时,它将存储在Project类型的对象中,其中包含其他一些数据,然后将其序列化为XML,压缩并保存在磁盘。
public class Session : INotifyPropertyChanged
{
...
public bool Save(string fileName, bool updateDatabase)
{
Project project = new Project()
{
ProjectInfo = this.ProjectInfo,
...
}
using (MemoryStream documentStream = new MemoryStream())
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Project));
xmlSerializer.Serialize(documentStream, project);
...
}
}
...
}
它确实没有任何异常或特殊之处。然而,最近,一位客户抱怨无法打开某个项目,在检查了zip文件中的XML文件时,我偶然发现了这条令人讨厌的文本:
<ProjectInfo ConstructionProjects="Wiesenäckerweg 46, Grötzingen"
...>
...
</ProjectInfo>
现在,这些小的十六进制值转换为以下不可打印的ASCII控制字符:
据我所知,铃声应该让接收器发出嘟嘟声,但DC3和4的含义超出了我的意思。无论如何,尝试对XML进行解密会引发无效的字符异常。
现在,当然,一个精通且精通的用户可以简单地打开zip,手动提取和修改XML,但假设他们不是。这些控制字符是否有可能仅通过我们的UI进入解析的XML文件?我尝试使用alt + 7和alt + 1,alt + 9和alt + 2,alt + 0,但实际上绘制了其他可打印字符。我也试过\但是没有转换为xml代码。有没有办法将ASCII控制字符转换为字符串,以便在XML解析后表示它们的html代码?