Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NetworkStream中的xml字符无效_C#_Xml_Tcpclient_Networkstream - Fatal编程技术网

C# NetworkStream中的xml字符无效

C# NetworkStream中的xml字符无效,c#,xml,tcpclient,networkstream,C#,Xml,Tcpclient,Networkstream,我使用TcpClient在C#forms应用程序中从远程服务器请求数据。当接收XML格式的数据时,我遇到了一个问题,因为XML根前面有一个控制字符(%)。我知道这一点,因为当我使用控制台应用程序接收数据时,我可以看到它 在forms应用程序中,我尝试通过NetworkStream接收数据,然后读取字节数组并在解析之前将其转换为字符串。也许这是错误的方法-如果是,请纠正我 这是我的代码的相关部分: byte[] requestBytes = Encoding.ASCII.GetBytes(form

我使用
TcpClient
在C#forms应用程序中从远程服务器请求数据。当接收XML格式的数据时,我遇到了一个问题,因为XML根前面有一个控制字符(%)。我知道这一点,因为当我使用控制台应用程序接收数据时,我可以看到它

在forms应用程序中,我尝试通过
NetworkStream
接收数据,然后读取字节数组并在解析之前将其转换为字符串。也许这是错误的方法-如果是,请纠正我

这是我的代码的相关部分:

byte[] requestBytes = Encoding.ASCII.GetBytes(formattedRequest);
ns.Write(requestBytes, 0, requestBytes.Length);

byte[] serverResponse = new byte[1024];
serverResponse = Encoding.ASCII.GetBytes("\n");
ns.Write(serverResponse, 0, serverResponse.Length);

byte[] newMsg = new byte[1024];
myStream.serverBytes = ns.Read(newMsg, 0, newMsg.Length);

string invalidString = Encoding.ASCII.GetString(newMsg, 0, myStream.serverBytes);
string cleanString = invalidString.Remove(0, 1);
//Attempt at removing the invalid % character before XML root.

var fullItem = XDocument.Parse(quoteString);
string itemA = quote.Descendants("QUOTE").Select(x => x.Attribute("itemA").Value).FirstOrDefault();
string askString = quote.Descendants("QUOTE").Select(x => x.Attribute("itemB").Value).FirstOrDefault();
var quote=XDocument.Parse(quoteString)
行出现以下错误:

XmlException:十六进制值0x01是无效字符。第1行,位置1。

显然,这有一个很好的理由,因为XML根前面的%是无效的XML字符,因此不会加载它(请参阅)。但对于这样一个(看似)小问题,本文中的解决方案似乎非常复杂


如何从XML格式的流中获取数据,以便读取itemA和itemB,而不会因为XML根之前的控制字符而引发XMLException?

是否确实要ASCII编码?ASCII是一种7位编码。代码高于127的任何字符都将转换为问号。例如,如果您获取的数据使用Windows-1252代码页或UTF-8,则使用ASCII编码进行转换将破坏您的数据。ASCII适用于所有其他服务器响应,因此在此基础上,它在这里肯定没有什么不同。我刚刚试过UTF-8,它在同一行中抛出相同的错误。