[英]Why does HttpWebResponse return a null terminated string?
我最近使用HttpWebResponse從HttpWebRequest返回xml數據,我注意到該流向我返回了一個以null終止的字符串。
我之所以這樣認為是因為底層庫必須與C ++兼容,但是我找不到能夠提供進一步照明的資源。
通常,我想知道是否有一種簡便的方法來禁用此行為,因此我不必清理傳遞給xml閱讀器的字符串。
編輯此處是相關代碼的示例:
httpResponse.GetResponseStream().Read(serverBuffer, 0, BUFFER_SIZE);
output = processResponse(System.Text.UTF8Encoding.UTF8.GetString(serverBuffer))
其中processResponse如下所示:
processResponse(string xmlResponse)
{
var Parser = new XmlDocument();
xmlResponse = xmlResponse.Replace('\0',' '); //fix for httpwebrequest null terminating strings
Parser.LoadXml(xmlResponse);
這絕對不是正常的行為。 兩種選擇:
Read
,期望它填充緩沖區) 如果沒有別的,您應該能夠使用Wireshark分辨出區別。
嗯...我懷疑它是否返回以Null結尾的字符串,因為C#中根本沒有這樣的概念。 充其量,您可以在字符串的末尾添加一個\\0u0000
字符,但是在這種情況下,這意味着從服務器返回的字符串中包含這樣的字符,並且HttpWebRequest只是在履行職責並返回服務器返回的任何內容。
更新資料
讀取代碼后,錯誤非常明顯:您是Read()
從流變成字節[],但沒有注意到實際讀取了多少 :
int responseLength = httpResponse.GetResponseStream().Read(
serverBuffer, 0, BUFFER_SIZE);
output = processResponse(System.Text.UTF8Encoding.UTF8.GetString(
serverBuffer, 0, responseLength));
這將解決當前的問題,僅處理代碼中的其他錯誤,例如您無法正確處理大於BUFFER_SIZE
的響應……我建議您在返回的流上打開XML文檔閱讀器,而不是通過(不必要的)byte []復制操作來操縱流:
Parser.Load(httpResponse.GetResponseStream());
可能是您正在設置要加載的緩沖區的大小(錯誤的大小)嗎?
如果不需要臨時緩沖區,可以使用StreamReader來避免。
using(var stream = new StreamReader(httpResponse.GetResponseStream()))
{
string output = stream.ReadToEnd();
//...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.