1. 程式人生 > >關於(十六進位制值 0x00)是無效的字元

關於(十六進位制值 0x00)是無效的字元

       終於把自已惡搞一把,平時圖省勁用山寨客戶端向伺服器提交資料,資料編碼一直有問題。鄙人負責伺服器的WCF介面開發,於是有一天測試WCF時填了自己的使用者名稱,接下來報錯

(十六進位制值 0x00)是無效的字元 ,報應啊。

      我首先是把WCF返回的物件序列化一下,存入資料庫。需要時反序列化,結果有些編碼不對的物件在這時出了問題。百度了一些國內的解決方法,例如替換

'\0'或者寫函式過濾,都解決不了問題。只能求助google中的英文資料了,結果是一很簡單的事,用xmlTextReader把stringReader包裝一下即可。

     總結,各類山寨客戶端是測試的神器。好多錯誤資訊抱的是中文錯誤,找不到中文資料時想法找到這個錯誤描述的英文原文,google之。

兩種解決方法程式碼如下:

Here is an example :

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 public class MyObject { public string MyString { get; set; } } class Program { static void Main(string[] args) {
XmlSerializerFactory fact = new XmlSerializerFactory(); XmlSerializer ser = fact.CreateSerializer(typeof(MyObject)); MyObject obj0 = new MyObject(); obj0.MyString = "Hello\0World"; // Serialize the object StringWriter sw = new StringWriter(); ser.Serialize(sw, obj0); string xml = sw.ToString(); // We can check that in the xml a \0 is transformed in �
Console.WriteLine(xml); // Classic use of XmlReader.Create StringReader sr1 = new StringReader(xml); XmlReader xr1 = XmlTextReader.Create(sr1); // xr1's type is XmlTextReaderImpl try { MyObject obj1 = (MyObject)ser.Deserialize(xr1); Console.WriteLine("XmlReader [CheckCharacters({0})] : Success : {1}", xr1.Settings.CheckCharacters, obj1.MyString); Console.WriteLine(obj1.MyString); } catch (Exception e) { Console.WriteLine("XmlReader [CheckCharacters({0})] : Error : {1}", xr1.Settings.CheckCharacters, e.InnerException); } // Using an XmlTextReader StringReader sr2 = new StringReader(xml); XmlTextReader xr2 = new XmlTextReader(sr2); // xr2.Settings is null MyObject obj2 = (MyObject)ser.Deserialize(xr2); Console.WriteLine("XmlTextReader : Success : {0}", obj2.MyString); // Using XmlReader with the good XmlReaderSettings StringReader sr3 = new StringReader(xml); XmlReaderSettings settings = new XmlReaderSettings(); settings.CheckCharacters = false; // default value is true; XmlReader xr3 = XmlTextReader.Create(sr3, settings); // xr3.Settings.CheckCharacters is a read only and xr3's type is XmlTextReaderImpl MyObject obj3 = (MyObject)ser.Deserialize(xr3); Console.WriteLine("XmlReader [CheckCharacters({0})] : Success : {1}", xr3.Settings.CheckCharacters, obj3.MyString); } }

相關推薦

關於( 0x00)是無效字元

       終於把自已惡搞一把,平時圖省勁用山寨客戶端向伺服器提交資料,資料編碼一直有問題。鄙人負責伺服器的WCF介面開發,於是有一天測試WCF時填了自己的使用者名稱,接下來報錯 (十六進位制值 0x00)是無效的字元 ,報應啊。       我首先是把WCF返回的物件序

C#過濾XML( 0x1D)無效字元

載入或儲存XML時引發的異常.System.ArgumentException: “”(十六進位制值 0x1D)是無效的字元。 產生原因是xml檔案中包含低位非列印字元造成的 處理方法:在產生xml檔案的時候,過濾低位非列印字元 把一個字串中的 低序位 ASCII 字元 替

xml序列化,異常:( 0x1D)是無效字元

產生原因是xml檔案中包含低位非列印字元造成的 處理方法:在產生xml檔案的時候,過濾低位非列印字元 把一個字串中的 低序位 ASCII 字元 替換成 {0:x}字元 轉換  ASCII  0 - 8  轉換  ASCII 11 - 12 轉換  ASCII 14 -

XML 0x0B 是無效字元錯誤處理方法

case: xmlDocument.Load Ds.ReadXML 提示錯誤,錯誤資訊如下: 十六進位制值 0x0B 是無效的字元錯誤 產生原因是xml檔案中包含低位非列印字元造成的 處理方法:在產生xml檔案的時候,過濾低位非列印字元 public static stri

呼叫webservice介面,報錯:(0x01)是無效字元

--- ### #事故現場 呼叫webservice介面,報錯:(十六進位制值0x01)是無效的字元。 如圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020061319305357.png?x-oss-process=image/watermark,type_Zm

xslt中的問題:"<"(0x3C)是無效的屬性字元

今天早上換了臺電腦,但是把原來專案複製過來卻遇到了個問題,問題rt 研究了很久,都沒發現具體是什麼原因。 在網上搜了下,主要可能有3種原因導致的 1,快取,這個具體是看某個帖子說的,到底有沒有這種可能還是滿懷疑的。 2,xml格式錯誤,這個比較容易,檢查下xml文件,看下是否

名稱中不能包含“=”字元( 0x3D)。 行 1,XXXXXX

問題情境:在解析XML字串的時候,程式報錯,看來是string字串有問題 問題原因:一般情況下,都不太可能是我們的XML拼寫錯誤導致【因為我們都是認真的孩紙】 那麼唯一不同的是,我拼接用來測試的XML,沒有加入換行符。 解決問題:加上換行符之後,就好了

一個將轉換為二進位制字元陣列的函式

十六進位制數轉換為二進位制陣列的函式HexToBinStr 函式實現: void HexToBinStr(int hex, char *bin_str, int str_size) { int i; for (i = 0; i !=str_size; ++i) { b

QT---之QByteArray關於詳解

本文章主要總結QByteArray類的用法,主要是總結如何給QByteArray的物件賦值十六進位制數和顯示該十六進位制數以及十六進位制數在QByteArray中的儲存形式,具體的例項如下所述:(字元表示的十六進位制數:'\xFF') (Qt中QByteArray儲存的十六進位制數是0xff,實

C++入門篇——輸入一個整數並將這個整數分別以八,十進位制,輸出;同時輸入一個布林並且以布林的方式打印出來

C++入門篇 輸入一個整數並將這個整數分別以 八進位制,十進位制,十六進位制輸出; 同時輸入一個布林值並且以 布林值的方式打印出來 注意:執行的時候需要按 ctrl鍵+F5 如果想只按F5就執行,在return 0;前面加一段程式碼: system("pause"); 同時需要

Go:顏色程式碼轉換為RGB

  func ColorToRGB(colorstr string) (red, green, blue int) { colorstr = strings.TrimPrefix(colorstr, "#") color64, err := strconv.ParseInt(

隨機產生一個的顏色

<style> div{ width:300px; height:200px; background-color: pink; }</style><script> //隨機產生一個十六進位制的值 functi

ASCII碼轉化,十進位制數;字元轉十進位制,ASCII碼

用字元表示的十六進位制值轉化為十進位制,ASCII碼: bool ok; QStringList list; //初始化list的內容為:list = ("30", "31", "32", "33"

Oracle Error:ORA-01465: 無效數字【解決辦法】

如圖下面的錯誤,當讓表中插入資料時,報一下錯誤。 解決辦法: 1、修改表結構,待插入資料後再修改回來 這個方法就是你把BLOB型別的那個欄位修改為合適的,然後再插入,最後再修改表結構,是不是比較折騰。這個我試了下:通過sql語句修改以下表BLO

hibernate儲存blob欄時出錯 ORA-01465: 無效數字

14:42:22,376  WARN JDBCExceptionReporter:100 - SQL Error: 1465, SQLState: 72000 14:42:22,377 ERROR JDBCExceptionReporter:101 - ORA-01465:

顏色和rgb顏色互相轉換 將16的顏色轉為rgb顏色

  在之前的一篇文章《將16進位制的顏色轉為rgb顏色》中,曾經寫過將16進位制的顏色轉換為rgb顏色。   當然了,今天再看,還是有很多可以優化的地方,所以對之前的程式碼重構了一遍,並且同時寫了一個反向轉換(也就是將rgb顏色值轉換為字串形式的16進位制的顏色值)函式。   16進位制轉換rgb:

我的Android階之旅------>Android顏色(#AARRGGBB)透明度百分比和對應關係以及計算方法

透明度百分比和十六進位制對應關係表格 透明度 十六進位制 100% FF 99% FC 98% FA 97% F7 96%

數拆分成兩個ASCII碼

       將一個十六進位制數轉化成兩個ASCII碼值,即兩個字元形式。 如0x3F,轉化成二進位制形式為0011 1111,轉化成字元為“3F”,將十六進位制轉化成兩個ASCII碼值(字元形式)。 #include<stdio.h> type

Android顏色(#AARRGGBB)透明度百分比和對應關係以及計算方法

public void switch() throws Exception { System.out.println("透明度 | 十六進位制"); System.out.println("---- | ----"); for (double i = 1; i

anroid 數字顏色表示"0x顏色",顏色為的顏色應程式碼

在android中經常看到設定的顏色為十六進位制的顏色值 因用到這些做一下記錄 /** *如程式碼設定 *<!-- 珊瑚色 --> *<color name="coral">#FFFF7F50</color>