java十六进制0xaa_“.”(十六进制值 0x00)是无效的字符解决方案

自从我们的项目数据层从读取数据库改为读取接口服务后,经常会出现一些类似于

5c0adda5129c40ab4f774ccaf613d03d.png的错误。我们的数据结构如下所示

->,C#为正则表达式提供了强大的支持,本课程重点讲述在C#环境下使用正则表达式,并能够学会分析创建属于自己的正则表达式,学习正则表达式请访问http://edu.51cto.com/course/course_id-4664.html]]>

接口数据

在用户输入的数据中常常有一些小人箭头之类的特殊符号(由于在www.cnblogs.com/xietong下不支持这些特殊符号,所以读者在我举例的数据结构中看不到这些特殊符号),我曾经尝试匹配这些特殊字符,然而未能找到与之相匹配的unicode代码区块,所以采用了匹配正常字符的方式来获取合法的数据用于xml解析。可以看到我们数据中的字符包括字母数字、各种标点、空白符,据此可以写出我们的正则表达式"(\w|\p{P}|\s)*"。在RegxTest下测试发现无法匹配“<>=”这些符号,加上这些符号后正则表达式为"(\w|\p{P}|[<>=]|\s)*",经测试,发现可以获取到所有正常的字符,在c#中代码如下:

string content = sb.ToString();

MatchCollection matches = Regex.Matches(content, @"(\w|\p{P}|[<>=]|\s)*");

sb = new StringBuilder();

foreach (Match m in matches)

{

sb.Append(m.Value);

}

content = sb.ToString();

在运行之后发现类似异常虽然少了很多,但还是有一部分异常,查看这些异常发现造成这些异常的原因正是存在16进制的字符,数据如下:

如果直接将0x式样的16进制去掉,那么这些图片就无法找到正确地址,似乎有些粗鲁。为此,我决定将相应的变量先取出来,然后在读取出来的DataSet中重新对相应字段赋值。我的代码如下:

MatchCollection imatches = null;

if (Regex.IsMatch(content, "0x[0-9a-fA-F]+", RegexOptions.IgnoreCase))

{

Regex regex = new Regex(@"\k'tag'>");

imatches = regex.Matches(content);

if (imatches != null)

{

content = regex.Replace(content, "${tag}>");

}

}

System.Xml.XmlDocument xd = new System.Xml.XmlDocument();

xd.LoadXml(content);

System.Xml.XmlNodeReader xnr = new System.Xml.XmlNodeReader(xd);

ds.ReadXml(xnr);

xnr.Close();

if (imatches != null && imatches.Count > && ds != null && ds.Tables.Count > )

{

foreach (Match m in imatches)

{

foreach (DataTable table in ds.Tables)

{

if (table.Columns.Contains(m.Groups["tag"].Value))

{

table.Rows[][m.Groups["tag"].Value] = m.Groups["text"].Value;

break;

}

}

}

}

在上面的代码中用到了正则的文本替换及分租,如果有不理解的地方可以在http://edu.51cto.com/course/course_id-4664.html中学习一下基本的C#正则表达式知识。

上面的代码经测试可以正常运行,但放到那里呢,虽然在try-catch抛出异常,在异常中处理的话要耗费几百个时钟周期,但鉴于问题数据只是一小部分,并且上面的正则表达式的效率并不太高,所以我将上面的代码放在了catch语句块中。

&lbrack;No0000133&rsqb;c&num; ERROR&colon;&OpenCurlyDoubleQuote;&period;”&lpar;十六进制值 0x00&rpar;是无效的字符

December 24, 2013 c# exception “.”(十六进制值 0x00)是无效的字符. 解决方法:常见于socket方式连接(包括HTTP方式)等.报文交互时候,对方会在字符串后面 ...

调用webservice接口,报错:&lpar;十六进制值0x01&rpar;是无效的字符

#事故现场 调用webservice接口,报错:(十六进制值0x01)是无效的字符. 如图: 意思是webservice返回的信息中包含无效的字符,无法解析成xml: #分析 使用postman向we ...

SSRS 在订阅的时候,在头值中找到无效的字符。将不重新发送邮件

在头值中找到无效的字符.将不重新发送邮件 SSRS 在订阅的时候,在头值中找到无效的字符.将不重新发送邮件! 查看了一下,只要是发送文件类型的都不可以,改成HTML的就可以.然后重新把RS的报表文件友 ...

XML 十六进制值 是无效的字符错误 解决方法之一 转

/// /// 过滤非打印字符 /// /// 待过滤

C&num;十六进制值0x12&comma;是一个无效字符 - 程序园

原文:C#十六进制值0x12,是一个无效字符 - 程序园 我正在加载很多xml文档,其中一些返回错误,如“十六进制值0x12,是无效字符”,并且有不同的字符.如何删除它们?   我在这里做了一个小的研 ...

MySql&lowbar;十六进制值

十六进制值 MySQL支持十六进制值.在数字上下文中,十六进制数如同整数(64位精度).在字符串上下文,如同二进制字符串,每对十六进制数字被转换为一个字符: mysql> SELECT x'4D ...

CSS:CSS 颜色十六进制值

ylbtech-CSS:CSS 颜色十六进制值 1.返回顶部 1. 根据十六进制值排序 所有浏览器都支持的颜色名 根据颜色名排序的相同列表 颜色名 十六进制颜色值 颜色 Black #000000   ...

thinkphp事务处理以及无效时的解决方案(整理)

thinkphp事务处理以及无效时的解决方案(整理) 一.总结 一句话总结:要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql 1.InnoDB和MyISAM对事务的支持怎么样? I ...

随机推荐

IOSGCD

http://blog.csdn.net/duxinfeng2010/article/details/8958681/ http://kyfxbl.iteye.com/blog/1997516

Linux 系统下查看硬件信息命令大全

有许多命令可以用来查看 Linux 系统上的硬件信息.有些命令只能够打印出像 CPU 和内存这一特定的硬件组件信息,另外一些命令可以查看多种硬件组件的信息. 这个教程可以带大家快速了解一下查看各种硬件 ...

利用jQuery打造个性网站

网页结构 编写全局样式(reset.css) /*全局样式*/ body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fi ...

&lbrack;Noi2016&rsqb;国王饮水记

来自FallDream的博客,未经允许,请勿转载,谢谢. 跳蚤国有 n 个城市,伟大的跳蚤国王居住在跳蚤国首都中,即 1 号城市中.跳蚤国最大的问题就是饮水问题,由于首都中居住的跳蚤实在太多,跳蚤国王 ...

谈谈JAVA中的安全发布

谈谈JAVA中的安全发布 昨天看到一篇文章阐述技术类资料的"等级",看完之后很有共鸣.再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸,又掏出了

接前一篇:new select option保存搜索条件

WD_SELECT_OPTIONS_20新加了很多好玩的东西,尤其是里面的保存搜索条件和使用保存的搜索条件.因为这个比较想WEB UI,所以兴趣比较高一点,WEB UI里是把参数拼成XML存起来的,我 ...

【搬运】 Page Object 官方文档 (新增了Widget特性)

Appium Java client has facilities which components to [Page Object](https://github.com/SeleniumHQ/se ...

&lbrack;c&sol;c&plus;&plus;&rsqb; programming之路(12)、循环结构

一.求2n #include void main(){ ; ; while(n--){ s*=; printf("%d,%d\n",s,n); } g ...

TypeScript 之 模块

https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/Modules.html 外部模块简写 外部模块简写:declare ...

作业 20181204-5 Final阶段贡献分配规则及实施

此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2479] 小组介绍 组长:付佳 组员:张俊余 李文涛 孙赛佳 田良 于洋 ...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值