2013-11-22 2 views
0

Выполнение PUT на клиента веб-службы с помощью этогоSystem.Text.Encoding.UTF8.GetBytes представляя странный характер

using System; 
using System.IO; 
using System.Net; 

class Test 
{ 
    static void Main() 
    { 
     string xml = "<xml>...</xml>"; 
     byte[] arr = System.Text.Encoding.UTF8.GetBytes(xml); 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/"); 
     request.Method = "PUT"; 
     request.ContentType = "text/xml"; 
     request.ContentLength = arr.Length; 
     Stream dataStream = request.GetRequestStream(); 
     dataStream.Write(arr, 0, arr.Length); 
     dataStream.Close(); 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     string returnString = response.StatusCode.ToString(); 
     Console.WriteLine(returnString); 
    } 
} 

this SO answer Предоставлено

Если я смотрю на просьбы в стельку есть странный персонаж в конце моего запроса по почте </xml> выглядит как квадрат [подозревают его спецификацию]

не уверен, как это познакомилось с моей строкой.

+0

Значение по умолчанию 'UTF8.GetBytes' не включает спецификацию, и если вы запрашиваете одно, оно добавляется к фронту массива, а не к концу. Код, который вы отправили, не включает в себя «странный символ», поэтому происходит что-то еще. Вы делаете что-нибудь еще для «arr»? Скопируйте «странный символ» и посмотрите на него в шестнадцатеричном редакторе. –

+0

Как вы создаете строку xml? Пример, если вы используете XmlWriter, тогда вам нужно установить следующее: 'new XmlWriterSettings {Encoding = new UTF8Encoding (false)}' – Jaex

ответ

2

Использование new UTF8Encoding(false).GetBytes(xml);

UTF8Encoding Constructor (Boolean): Инициализирует новый экземпляр класса UTF8Encoding. Параметр указывает, следует ли указывать знак порядка байтов в Юникоде.

+0

Пробовал это, но странный квадрат все еще существует в конце моих xml-данных в скрипаче. – user1361914

Смежные вопросы