4
我在向Mandrill API發送JSON對象時遇到編碼問題。 向UTF8編碼的Streamwriter寫入時拋出以下異常:使用UTF8編碼的「要寫入流中的字節超過指定的內容長度字節大小」json
「要寫入流的字節超過指定的Content-Length字節大小。 和之後: 「寫入所有字節之前無法關閉流。」
這是用來發送JSON對象的代碼部分:
var httpWebRequest = (HttpWebRequest)WebRequest.Create(mandrillUrl + "/messages/send.json");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
var ser = new DataContractJsonSerializer(wrapper.GetType());
var ms = new MemoryStream();
ser.WriteObject(ms, wrapper);
var json = Encoding.UTF8.GetString(ms.ToArray());
httpWebRequest.ContentLength = json.Length;
var stream = httpWebRequest.GetRequestStream();
using (var strWriter = new StreamWriter(stream, Encoding.UTF8))
{
strWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
}
在我看來,這個錯誤是關係到UTF8字節長度,但即使我加倍httpWebRequest.ContentLength值I仍然會得到相同的錯誤。
UTF-8是可變長度編碼。字符數不一定等於字節數。你不能使用'json.Length'來設置'httpWebRequest.ContentLength'。 – Tomalak 2013-03-15 10:29:34
您應該閱讀http://stackoverflow.com/a/1656741/18771,這將解決您的問題 – Tomalak 2013-03-15 10:38:34