調用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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM