当前位置: 首页 > 编程语言 > C#

使用C#.NET处理XML中的禁用字符分享

时间:2023-04-10 22:16:48 C#

C#学习教程:使用C#.NET处理XML中的禁止字符其中一个属性中的值似乎包含十六进制字符0x1E。我已尝试将XmlWriterSettings的编码属性设置为“utf-16”和“unicode”,但我仍然抛出异常:这是生成XML文档的错误。—>System.InvalidOperationException:生成XML文档时出错。—>System.ArgumentException:",hexvalue0x1E,isaninvalidcharacter。有没有办法把这些字符放到xml中?如果不行,还有其他字符会出问题吗?可以像HTML一样转义。0x1E与十进制数30相同,因此只需将记录分隔符替换为字符串“&30;”。应该没问题。XML推荐标准(又名规范)http://www.w3.org/TR/2000/REC-xml-20001006概述了哪些字符是不允许的并且必须转义2.2字符[定义:一个已解析的实体包含文本,可能表示标记或字符数据的字符序列。][定义:一个字符在ISO/IEC10646中指定[ISO/IEC10646]文本基元的单位(参见[ISO/IEC10646-2000])。合法字符有制表符、回车符、换行符,以及Unicode和ISO/IEC10646的合法字符。A.1引用在规范性参考文件中这些标准的版本在编写本文档时是最新的。新的字符可能会通过修订或新版本添加到这些标准中。因此,XML处理器必须接受为Char指定的范围内的任何字符。[Unicode]第6.8节中定义的[“兼容性字符”的使用(另见[Unicode3]第3.6节中的D21)。字符范围[2]Char::=#x9|#xA|#xD|[#x20-#xD7FF]|[#xE000-#xFFFD]|[#x10000-#x10FFFF]/*任何Unicode字符,不包括代理项块、FFFE和FFFF。*/用于将字符代码点编码为位模式的机制因实体而异。所有XML处理器必须接受10646的UTF-8和UTF-16编码;稍后将在字符编码中讨论的4.3.3实体中介绍用于指示正??在使用两者中的哪一个或使其他编码起作用的机制。我知道这是一个老问题,但我找到了一个链接并将其发布在这里,它对遇到此问题的任何人都有用。这个对我有用。http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/和该站点的代码。(如果站点出现故障)//////从字符串中删除非法的XML字符。///publicstringSanitizeXmlString(stringxml){if(xml==null){thrownewArgumentNullException("xml");}StringBuilderbuffer=newStringBuilder(xml.Length);foreach(charcinxml){if(IsLegalXmlChar(c)){buffer.Append(c);}}返回buffer.ToString();}//////XML1.0是否允许给定字符。///publicboolIsLegalXmlChar(intcharacter){return(character==0x9/*=='t'==9*/||character==0xA/*=='n'==10*/||character==0xD/*=='r'==13*/||(character>=0x20&&character=0xE000&&character=0x10000&&characterXML是一种人类可读的格式,不允许使用不可打印的控制字符。您可以使用像"这样的十进制字符实体代码来表示它们,或者对内容进行base-64编码。由于您没有提供任何详细信息,我猜您的属性是System.String类型的。如果是这样,那么您将无法序列化它原样。相反,您必须将其序列化为byte[]:[XmlRoot("root")]publicclassHasBase64Content{[XmlIgnore]publicstringContent{get;放;}[XmlElement("Content")]publicbyte[]Base64Content{get{returnSystem.Text.Encoding.UTF8.GetBytes(Content);}set{if(value==null){内容=null;返回;}内容=System.Text.Encoding.UTF8.GetString(值);如果您的数据不允许Unicode控制图片块中的字符,您可以通过在序列化时用控制字符替换它们并在反序列化时再次替换它们来保持人类可读性。以下是字符:????????????????????????????????希望它们在您的浏览器和编辑器中呈现。即使不这样做,它们在XML中也是合法的。以上就是C#学习教程:使用C#.NET处理XML中的禁止字符。如果对你有用,需要了解更多C#学习教程,希望大家多加关注---本文来自网络收藏,不代表立场,如涉及侵权,请指教点击右侧联系管理员删除。如需转载请注明出处: