2017-07-26 3 views
0

ich ein Xml als Strom ist das Senden HttpWebRequest verwenden, aber ich erhalte die folgende Antwort:Wie eine xml (Kodierung UTF-16 BE) und sendet als Strom zu schaffen, in HttpWebRequest

I „Den Inhalt wird in Prolog nicht erlaubt“ sollte die Codierung UTF-16BE verwenden, aber ich weiß nicht wie.

My aktuellen Code:

private void sendXml(string protocolo, string path) 
    { 
     string base64 = Convert.ToBase64String(Encoding.Default.GetBytes("user:password")); 
     string authorization = String.Concat("Basic ", base64); 

     String finalResult; 
     HttpWebRequest hwrRequest = (HttpWebRequest)HttpWebRequest.Create("https://address/"+protocolo); 

     hwrRequest.UseDefaultCredentials = true; 
     hwrRequest.Headers.Add("Authorization", authorization); 
     hwrRequest.Method = "PUT"; 

     string finalXML = @"<?xml version=""1.0"" encoding=""UTF-16BE""?>...."; 

     byte[] bytes = Encoding.BigEndianUnicode.GetBytes(finalXML); 

     hwrRequest.ContentLength = bytes.Length; 

     using (Stream putStream = hwrRequest.GetRequestStream()) 
     { 
      putStream.Write(bytes, 0, bytes.Length); 
     } 

     using (HttpWebResponse response = (HttpWebResponse)hwrRequest.GetResponse()) 
     using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
     { 
      finalResult = reader.ReadToEnd(); 
      visualiza.Text = visualiza.Text + "\n " + finalResult; 
     } 
    } 

Methode zur Erzeugung XmlDocument

private void geraXML() 
    { 

     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.PreserveWhitespace = false; 
     byte[] xml = Encoding.BigEndianUnicode.GetBytes(@"<?xml version=""1.0"" encoding=""UTF-16BE""?>..."); 

     MemoryStream ms = new MemoryStream(xml, true); 
     xmlDoc.Load(ms); 
     string caminho = path/+"xmldoc.xml";    
     string nomeArquivo = "xmldoc.xml"; 
     xmlDoc.Save(caminho);      

     geraHASH(caminho, nomeArquivo);    
    } 

Antwort

0

Die Encoding Klasse - Big​Endian​Unicode

Ruft eine Codierung für den UTF-16-Format, das Einsatz die Big-Endian-Byte-Reihenfolge.

So können Sie Ihren Code ändern, um dies (anstelle von ASCII

 string finalXML = @"<?xml version=""1.0"" encoding=""UTF-16BE""?>"; 

     byte[] bytes = Encoding.BigEndianUnicode.GetBytes(finalXML); 

zu verwenden Wenn Sie in die faszinierende Welt der Unicode und Codierung wirklich interessiert sind, können Sie bei this

+0

Ich sehe habe getan, was du traurig bist, aber ich stehe vor einem anderen Problem. bevor ich die finalXML sende, habe ich eine Methode, die ein XmlDocument aus der Zeichenkette finalXML erzeugt und einen Hash erzeugt, der benutzt wird, um ein Protokoll anzufordern und dann benutze ich diese Protokollnummer finalXML. Wenn der Webservice den Stream empfangen, erzeugen sie einen neuen Hash zu com pare mit dem Hash-Code, der zur Anforderung eines Protokolls verwendet wird. und das ist das Problem. der Hash-Code ist anders. – Periclowisk

+0

In diesem Beitrag erkläre ich mehr das Problem: https://stackoverflow.com/questions/45333005/why-when-iinsert-encoding-utf-16be-in-xml-tha-hash-is-different – Periclowisk

Verwandte Themen