当前位置: 首页 > 知识库问答 >
问题:

使用UTF8编码的json,“要写入流的字节超过指定的内容长度字节大小”

后源
2023-03-14

在向Mandrill API发送JSON对象时,我面临编码问题。在使用UTF8编码写入流写器时,会引发以下异常:

“要写入流的字节超过了指定的内容长度字节大小。”紧接着:“在写入所有字节之前无法关闭流。”

这是用于发送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值我仍然会得到相同的错误。

共有1个答案

卢开济
2023-03-14

必须以字节为单位指定内容长度,而不是chars

var json = Encoding.UTF8.GetString(ms.ToArray());
httpWebRequest.ContentLength = Encoding.UTF8.GetByteCount(json);

 类似资料:
  • 我的问题是,当我上传一个文件超过我在脚本中设置的限制(5 MB)时,它会在网站顶部显示此警告: 警告:第0行未知中32485176字节的POST内容长度超过了20971520字节的限制 例如,在这里,我上传了一个文件超过(30 MB),但当我上传一个文件超过(5 MB),小于30(或没有那么大)它不显示警告,只显示我想要的代码错误: 我正在localhost,这个错误每次都出现,我知道如何通过修改

  • 问题内容: 用户在我的网站上上传图片时遇到了很多问题。 他们最多可以上传6张图片 最初,我不得不将php.ini中的值更改为: 我不得不更改为这个,因为出现了各种错误,例如内存不足,超出最大发布数等。 一切正常,直到我检查了包含以下内容的错误日志: 如果我将帖子的最大值改回前8M,则会收到如下消息: 有什么想法我要去哪里吗? 问题答案: 在某些32位系统上,PHP将采用类似或的内存设置,并且通过不

  • 在我的XAMPP本地开发环境中尝试在WordPress上上载导入时,我遇到此错误: 警告:第0行中未知的帖子内容长度8978294字节超过8388608字节的限制 我将从更改为,但这似乎没有任何作用。 有什么想法吗?

  • 问题内容: 我无法在上创建索引。 MySQL: 问题答案:

  • 问题内容: 当我执行以下命令时: 我收到此错误消息: 有关column1和column2的信息: 我认为只需要21个字节,而只需要501个字节。因此,总字节数是522,少于767。那么为什么收到错误消息? 问题答案: 在MySQL版本5.6(及更早版本)中,InnoDB表的前缀限制为767个字节。MyISAM表的长度为1,000字节。在MySQL 5.7及更高版本中,此限制已增加到3072字节。

  • 问题内容: 我已经将我的Elasticsearch集群从1.1升级到1.2,并且在索引一个较大的字符串时出现错误。 索引的映射: 我搜索了文档,但没有找到与最大字段大小有关的任何内容。根据核心类型部分,我不明白为什么要为某个字段“校正分析仪” 。 问题答案: 因此,您遇到了一个术语的最大大小问题。当您将一个字段设置为not_analyzed时,会将其视为一个术语。基本Lucene索引中单个术语的最