zoukankan      html  css  js  c++  java
  • 关于xml中有特珠字符而导致XmlDocument无法Load的处理

    这是个小事故导致的。。。

    我们线上有个节目里名称里(`F`H9)MSTJXCX0B3J69,虽然我们看到是(`F`H9)MSTJXCX0B3J69,但百思不得其解,发现每次在XmlDocument.Load(xml)时抛出异常

    后打了段log到服务器上,拷贝回来后发现生成(`F`H9)MSTJX(ENQ)CX0B3J69,其中(ENQ)是UI和数据库里没显示的部分,而且也无法拷贝出来,只是在Submit Text中显示为(ENQ),明显是个不可见字符,分析应该是特殊符号导致的

    远程调试将所有xml拿到看到在字符串quick watch得到是(`F`H9)MSTJXu0005CX0B3J69,明显里面有特殊符号,unicode

    于是方案就简单了,干掉字符串中相关非法字符即可

    将常见非法字符纠结起来

    private static readonly char[] InvalidFileNameChars = new[]{'"', '<','>','|','','u0001','u0002','u0003','u0004','u0005','u0006','a','',' ',' ','v','f',' ','u000e','u000f',
    'u0010','u0011','u0012','u0013','u0014','u0015','u0016','u0017','u0018','u0019','u001a','u001b','u001c','u001d','u001e','u001f',':','*',
    '?','\','/' };

    然后通过一个滤掉非法字符函数处理下

    public string CleanInvalidFileName(string fileName)
    {
    fileName = fileName + "";
    fileName = InvalidFileNameChars.Aggregate(fileName, (current, c) => current.Replace(c + "", ""));
    if (fileName.Length > 1)
    if (fileName[0] == '.')
    fileName = "dot" + fileName.TrimStart('.');
    return fileName;
    }

    写了个小测试,我们之前原非法字符串为:(`F`H9)MSTJXCX0B3J69.gif

    经CleanInvalidFileName后为:(`F`H9)MSTJXCX0B3J69.gif

    测试成功,然后将该函数加入应用系统,写了个扩张函数,将对应的一些需要处理的name等属性后直接调用该扩展方法,编译后跑系统,果然OK

    这种小功能小记以备后期有相关问题能作小经验查看

  • 相关阅读:
    面试题目——《CC150》链表
    TCP/IP——链路层
    TCP/IP——基本知识
    面试题目——《CC150》数组与字符串
    Java递归算法——三角数字(消除递归)
    Java排序算法——拓扑排序
    Java排序算法——希尔排序
    Python学习笔记——条件和循环
    Python学习笔记——集合类型
    英文写作——冠词的使用(Use 0f Articles)
  • 原文地址:https://www.cnblogs.com/AreaWhere/p/6559118.html
Copyright © 2011-2022 走看看