调用webservice接口,报错:(十六进制值0x01)是无效的字符

Posted willingtolove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用webservice接口,报错:(十六进制值0x01)是无效的字符相关的知识,希望对你有一定的参考价值。


#事故现场

调用webservice接口,报错:(十六进制值0x01)是无效的字符。
如图:
技术图片
意思是webservice返回的信息中包含无效的字符,无法解析成xml;

#分析

使用postman向webservice发送请求,请求成功,返回了数据,但在数据中发现了一些莫名其妙的字符,如图:
技术图片
因数据来源数据库,故去数据库中查询,果然又发现,如图:
技术图片
将异常文本复制到notepad++中,显示的是:SOH
技术图片
SOH是ASCII中的控制字符,start of heading的缩写,报文头的意思;

在ASCII码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。
技术图片

#解决方法

故取数据的时候要过滤掉这些字符,以C#代码为例:

/// <summary>
/// 过滤不可见字符
/// </summary>
/// <param name="sourceString">原始字符</param>
/// <returns>删除后结果</returns>

public string DeleteControlChar(string sourceString)
{
       System.Text.StringBuilder sBuilder = new System.Text.StringBuilder();
       for (int i = 0; i < sourceString.Length; i++)
       {
            int Unicode = sourceString[i];
            if (Unicode > 31 && Unicode != 127)
            {
                sBuilder.Append(sourceString[i].ToString());
            }
       }
     return sBuilder.ToString();
}











以上是关于调用webservice接口,报错:(十六进制值0x01)是无效的字符的主要内容,如果未能解决你的问题,请参考以下文章

pb调用webservice 报错,该怎么解决

nodejs调用webservice接口返回500是啥原因

webservice 接口用java中的axis调用,java编程传递一个参数String[]给网络接口为啥报错

webservice接口返回值格式问题

springboot项目调用webservice客户端 问题

webservice接口,如何用Java代码更新数据库中的一个字段的值,其他字段值保持不变?