Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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# 如何在HttpWebRequest中创建xml(编码utf-16BE)并作为流发送_C#_Xml_Encoding_Httpwebrequest_Utf - Fatal编程技术网

C# 如何在HttpWebRequest中创建xml(编码utf-16BE)并作为流发送

C# 如何在HttpWebRequest中创建xml(编码utf-16BE)并作为流发送,c#,xml,encoding,httpwebrequest,utf,C#,Xml,Encoding,Httpwebrequest,Utf,我使用HttpWebRequest以流的形式发送Xml,但收到以下响应:“prolog中不允许内容” 我应该使用UTF-16BE编码,但我不知道如何使用 我当前的代码: private void sendXml(string protocolo, string path) { string base64 = Convert.ToBase64String(Encoding.Default.GetBytes("user:password")); string

我使用HttpWebRequest以流的形式发送Xml,但收到以下响应:“prolog中不允许内容”

我应该使用UTF-16BE编码,但我不知道如何使用

我当前的代码:

 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;
        }
    }
private void sendXml(字符串协议,字符串路径)
{
string base64=Convert.ToBase64String(Encoding.Default.GetBytes(“用户:密码”);
字符串授权=string.Concat(“基本”,base64);
字符串最终结果;
hwrRequest=(HttpWebRequest)HttpWebRequest.Create(“https://address/“+原生动物);
hwrRequest.UseDefaultCredentials=true;
添加(“授权”,授权);
hwrRequest.Method=“PUT”;
字符串finalXML=@“…”;
byte[]bytes=Encoding.bigendianucode.GetBytes(finalXML);
hwrRequest.ContentLength=字节.Length;
使用(Stream putStream=hwrRequest.GetRequestStream())
{
写入(字节,0,字节,长度);
}
使用(HttpWebResponse=(HttpWebResponse)hwrRequest.GetResponse())
使用(StreamReader=newstreamreader(response.GetResponseStream())
{
finalResult=reader.ReadToEnd();
visualiza.Text=visualiza.Text+“\n”+最终结果;
}
}
方法生成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);            
    }
private-xml()
{
XmlDocument xmlDoc=新的XmlDocument();
xmlDoc.PreserveWhitespace=false;
byte[]xml=Encoding.bigendianucode.GetBytes(@“…”);
MemoryStream ms=新的MemoryStream(xml,true);
xmlDoc.Load(ms);
字符串caminho=path/+“xmldoc.xml”;
字符串nomeArquivo=“xmldoc.xml”;
xmlDoc.Save(caminho);
geraHASH(卡米尼奥,诺梅尔基沃);
}

编码类具有-​

获取使用big-endian字节顺序的UTF-16格式的编码

因此,您可以更改您的代码以使用它(而不是ASCII)

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

        byte[] bytes = Encoding.BigEndianUnicode.GetBytes(finalXML);
string finalXML=@”;
byte[]bytes=Encoding.bigendianucode.GetBytes(finalXML);

如果你真的对Unicode和编码的迷人世界感兴趣,你可以看看

我做了你伤心的事,但我面临着另一个问题。在发送finalXML之前,我有一个方法,可以从字符串finalXML创建一个XmlDocument,并生成一个用于请求协议的哈希。然后我使用这个协议号发送finalXML。当Webservice接收到流时,它们会生成一个新的哈希,与用于请求协议的哈希代码进行比较。这就是问题所在。哈希代码不同。在这篇文章中,我将进一步解释这个问题: