1. 程式人生 > >呼叫webservice介面,報錯:(十六進位制值0x01)是無效的字元

呼叫webservice介面,報錯:(十六進位制值0x01)是無效的字元

--- ### #事故現場 呼叫webservice介面,報錯:(十六進位制值0x01)是無效的字元。 如圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020061319305357.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbGxpbmd0b2xvdmU=,size_16,color_FFFFFF,t_70) 意思是webservice返回的資訊中包含無效的字元,無法解析成xml; ### #分析 使用postman向webservice傳送請求,請求成功,返回了資料,但在資料中發現了一些莫名其妙的字元,如圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200613195121992.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbGxpbmd0b2xvdmU=,size_16,color_FFFFFF,t_70) 因資料來源資料庫,故去資料庫中查詢,果然又發現,如圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200613195414752.png) 將異常文字複製到notepad++中,顯示的是:SOH ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200613195546673.png) SOH是ASCII中的控制字元,start of heading的縮寫,報文頭的意思; 在ASCII碼中,第0~31號及第127號(共33個)是控制字元或通訊專用字元,如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(振鈴)等;通訊專用字元:SOH(文頭)、EOT(文尾)、ACK(確認)等。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200613200037706.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbGxpbmd0b2xvdmU=,size_16,color_FFFFFF,t_70) ### #解決方法 故取資料的時候要過濾掉這些字元,以C#程式碼為例: ```csharp /// /// 過濾不可見字元 /// /// 原始字元 /// 刪除後結果 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(); }