c# - 从SQL Server检索XML时如何防止非法字符出现在我的XML中

标签 c# regex web-services xml-serialization illegal-characters

有时,我的类中Properties的字符串值变得奇怪。它们包含非法字符,并显示如下(带有框):

123[]45[]6789


我假设这些字符是非法/无法识别的字符。我将所有对象序列化为XML,然后通过Web服务上载它们。当我再次检索它们时,某些字符被替换为奇数。最常见的情况是使用Word键入连字符和破折号。那是原因吗?

无论如何,我可以通过正则表达式或其他方式检查字符串是否包含这些无法识别的字符吗?

最佳答案

首先要记住的是,没有“特殊字符”或“非法字符”之类的东西。在某些情况下,有些字符是特殊的,有些字符是非字符,但通常没有“特殊字符”或“非法字符”。

您所拥有的是:


完全正常的字符,其字体没有字形。
完全不能打印的普通字符(例如控制字符)。
调试器工作原理的人工制品。


第一件事就是找出那个角色是什么。查找字符的整数值,然后查找它。

需要注意的一个重要方面是U + FFFD(...),因为当解码器收到一堆在尝试使用的编码上下文中没有意义的字节时(例如0x80后跟0x20,在UTF-8中没有意义,一种可能的响应是将U + FFFD用作“此处有奇怪的东西”标记,其他可能的响应则抛出错误,并且静默地忽略该错误或试图猜测意图,尽管最后两个带来安全问题)。

一旦解决了这个问题,就可以开始思考为什么它出人意料地进入了那里。可能是编码问题(写入的字符集不是读取的字符集)吗?可以原本打算在那里吗?可能还有其他吗?在没有有关该错误的更多信息之前,您无法开始回答。

最后,有一个解决方法。从上面的研究中找到的答案希望这将是显而易见的。答案可能是“没事”,可能是简单或困难。还不能说。

不要仅使用正则表达式进行过滤。也许这将是正确的解决方案,但是您还不知道,所以也许您正在比现在更难以发现更深的错误,或者损坏了完美的数据。

关于c# - 从SQL Server检索XML时如何防止非法字符出现在我的XML中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556597/

相关文章:

c++ - 奇怪的正则表达式机器与测试仪不同

Java 程序到 Web 服务\servlet

c# - csc.exe 引用外部 .dll 文件

javascript - 如何使用 Javascript Regex 检测和删除无效属性?

c# - 注入(inject)从 MethodInfo.GetMethodBody() 导出的 byte[]

mysql - 如何使用 IN 和参数检查 MySQL 中的多个值?

iphone - 如何管理 Web 驱动的 Iphone 应用程序中的 session

java - 在 Tomcat/Axis2 中使用 JAW-XS 注释

c# - 这种编程方法叫什么?这不好吗?

c# - 通用列表的动态排序标准