#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, и он выдает ту же ошибку в той же строке.