zoukankan      html  css  js  c++  java
  • XML序列化成功反序列化失败以及xml 十六进制值 0x0E)是无效的字符

    出现XML序列化成功,但是反序列化失败问题

    可能由于被序列化的对象中包含低序位非打印 ASCII 字符例如字符:

     

    字符在序列化时会把把一个字符串中的 低序位 ASCII 字符 替换成 &#x 编码字符

    例如

    <?xml version="1.0"?>
    <User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <UserName>好&#xE;强大</UserName>
    </User>

    例如&#xE;就是编码后的  字符

    /// 把一个字符串中的 低序位 ASCII 字符 替换成16进制s字符   
    /// 转换 ASCII 0 - 8 -> � - 
    /// 转换 ASCII 11 - 12 -> -
    /// 转换 ASCII 14 - 31 ->  - 
    /// </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("{0:X};", ss);
    else info.Append(cc);
    }
    return info.ToString();
    }

    如果反序列化时未给这种&#xE;做特殊处理,反序列化将失败,

    处理方式如下:

    1.序列化时给此类字符做特殊编码

    2.在反序列化时替换掉

     

     

    如果xml中包含有未编码的低位字符,XmlDocument对象将报错

    例如

     

    1.txt文件内容如下

    <?xml version="1.0"?>
    <User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <UserName>好强大</UserName>
    </User>

    好有红色标记的低位特殊字符,所有xml需要将这类字符替换掉

     

    替换掉未编码的低位序列字符,例如替换掉:

     

       public static string Repalce(string str)
    {
    return System.Text.RegularExpressions.Regex.Replace(str, @"[\x00-\x08]|[\x0B-\x0C]|[\x0E-\x1F]", "");
    }


    替换后xml正常加载

  • 相关阅读:
    查找一 线性表的查找
    排序八 基数排序
    Numpy数组的保存与读取方法
    编写你的第一个django应用程序3
    查看当前目录的文件
    requests不加代理
    .idea文件夹是干嘛的
    python获取当前的时间
    redis命令
    windows下python安装face_recognition模块
  • 原文地址:https://www.cnblogs.com/lichaoxyz/p/2429726.html
Copyright © 2011-2022 走看看