解决方案 »

  1.   

    使用CDATA,或者做一个BASE64编码。
      

  2.   

    对于特殊字符可以用base64编码后写入,读取时解码即可
      

  3.   


    能帮忙给贴上代码吗?本人C#菜鸟,大神多费神帮一下。我用方法
                byte[] b = Encoding.Default.GetBytes(str);
                string returnstr = Convert.ToBase64String(b);
    转码,等到的returnstr是"c2GjrC53ZXI=",其中"="号还是不允许插入xml的字符。
    求一个能解决此问题方法的代码。谢谢,谢谢啦!
      

  4.   

    而且你这个符号不算是特殊符号,XML只是不识 不可见字符。
      

  5.   

    恩,现在就是想得到一个方法,能否把带有xml不可解析字符的字符串,转为xml可识别的码写入,然后读取的时候再转回来做相应操作。
      

  6.   


            public static string XmlEncode(string s)
            {
                s = s.Replace("&", "&");
                for (int i = 0; i < 32; i++)
                {
                    s = s.Replace(((char)i).ToString(), "&amp;#" + i + ";");
                }
                for (int i = 95; i < 97; i++)
                {
                    s = s.Replace(((char)i).ToString(), "&amp;#" + i + ";");
                }
                return s;
            }
            public static string ReXmlEncode(string s)
            {
                s = s.Replace("&amp;", "&");
                for (int i = 0; i < 32; i++)
                {
                    s = s.Replace("&#" + i + ";", ((char)i).ToString());
                }
                for (int i = 95; i < 97; i++)
                {
                    s = s.Replace("&#" + i + ";", ((char)i).ToString());
                }
                return s;
            }
            /// <summary>
            /// 把一个字符串中的 低序位 ASCII 字符 替换成 &#x  字符
            /// 转换  ASCII  0 - 8  -> &#x0 - &#x8
            /// 转换  ASCII 11 - 12 -> &#xB - &#xC
            /// 转换  ASCII 14 - 31 -> &#xE - &#x1F
            /// </summary>
            /// <param name="tmp"></param>
            /// <returns></returns>
            public static string ReplaceLowOrderASCIICharacters(string tmp)
            {
                StringBuilder info = new StringBuilder();
                foreach (char cc in tmp)
                {
                    int ss = (int)cc;
                    if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))
                        info.AppendFormat("", ss);//&#x{0:X};
                    else info.Append(cc);
                }
                return info.ToString();
            }