Недопустимый символ xml в NetworkStream

#c# #xml #tcpclient #networkstream

#c# #xml #tcpclient #networkstream

Вопрос:

Я использую 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: hexadecimal value 0x01 is an invalid character. Line 1, position 1.

По-видимому, для этого есть веская причина, потому что% перед корнем XML является недопустимым символом XML и поэтому не загружает его (см. http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character / ). Но решение в этой статье кажется очень сложным для такой (казалось бы) небольшой проблемы.

Как я могу получить данные из потока в формате XML, чтобы я мог читать itemA и itemB, без исключения XmlException из-за управляющего символа перед корнем XML?

Комментарии:

1. Вы уверены, что вам нужна кодировка ASCII? ASCII — это 7-разрядная кодировка. Любой символ с кодом выше 127 будет преобразован в знак вопроса. Если данные, которые вы получаете, используют кодовую страницу Windows-1252 или UTF-8, например, преобразование с использованием кодировки ASCII приведет к уничтожению ваших данных.

2. ASCII работает для всех других ответов сервера, поэтому на этом основании здесь, безусловно, не должно быть никаких различий. Я только что попробовал UTF-8, и он выдает ту же ошибку в той же строке.