Не совсем понятно, что вы действительно должны сделать это. XML-файлы могут объявлять свою собственную кодировку, и, похоже, ваша декларация объявляет кодировку, начинающуюся с «ISO» (на этом данные, которые вы нам предоставили, останавливаются). Это вероятно не UTF-8.
По сути, я не думаю, что вы должны воспринимать данные как текст в handler.ashx. Просто получите XmlDocument
, чтобы разобрать его из потока. Не совсем ясно точно как ваш код загрузки отправляет данные, но вы должны постараться как можно меньше возиться с этим.
возможно , что ваш текущий код будет работать нормально, если вы просто измените это:
string complete = System.Text.ASCIIEncoding.ASCII.GetString(data);
XmlDocument doc = new XmlDocument();
doc.LoadXml(complete);
к этому:
XmlDocument doc = new XmlDocument();
doc.Load(new MemoryStream(data));
Тем не менее, шестнадцатеричная часть довольно некрасива. Если вам действительно нужно представить двоичные данные в виде текста, я настоятельно рекомендую использовать Base64 вместо hex:
string text = Convert.ToBase64String(binary);
...
byte[] binary = Convert.FromBase64String(text);
... нет необходимости преобразовывать каждый байт отдельно и разбивать строку на дефисы и т. Д.