关于(十六进制值 0x00)是无效的字符

       终于把自已恶搞一把,平时图省劲用山寨客户端向服务器提交数据,数据编码一直有问题。鄙人负责服务器的WCF接口开发,于是有一天测试WCF时填了自己的用户名,接下来报错

(十六进制值 0x00)是无效的字符 ,报应啊。

      我首先是把WCF返回的对象序列化一下,存入数据库。需要时反序列化,结果有些编码不对的对象在这时出了问题。百度了一些国内的解决方法,例如替换

'\0'或者写函数过滤,都解决不了问题。只能求助google中的英文资料了,结果是一很简单的事,用xmlTextReader把stringReader包装一下即可。

     总结,各类山寨客户端是测试的神器。好多错误信息抱的是中文错误,找不到中文资料时想法找到这个错误描述的英文原文,google之。

两种解决方法代码如下:

引用自http://baleinoid.com/whaly/2011/08/xml-deserialization-invalid-character/

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);
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
px4串口err: 11read是指在PX4飞控系统中,通过串口进行数据交互时遇到了读取错误。串口通信是一种基于硬件的通信方式,用于在不同设备之间传输数据。当出现err: 11read错误时,可能是由以下几个原因引起的。 首先,可能是串口连接出现了问题。如果串口连接不牢固或者连接线松动,就会导致数据传输错误。此时,可以检查串口连接,确保连接稳定且牢固。 另外,err: 11read错误还可能是由传输速率不匹配引起的。在串口通信中,发送和接收设备必须使用相同的传输速率,即波特率。如果发送设备的波特率与接收设备不匹配,就可能导致读取错误。此时,可以检查发送和接收设备的波特率设置,确保它们一致。 此外,err: 11read错误还可能是由数据传输中的干扰引起的。串口通信中,如果传输线路上存在电磁干扰或者其他干扰源,就会导致数据传输错误。在这种情况下,可以尝试增加信号线的屏蔽,或者使用更好质量的串口线。 最后,err: 11read错误还可能是由硬件故障引起的。如果串口设备本身存在问题或者损坏,就会导致数据读取错误。此时,可以尝试更换串口设备,并重新测试。 总之,px4串口err: 11read错误可能是由串口连接问题、传输速率不匹配、干扰等原因引起的。通过检查串口连接、确认波特率设置、排除干扰源以及更换串口设备,可以解决这个问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值