C# 计算包含Unicode字符的字符串的长度

C# 计算包含Unicode字符的字符串的长度,c#,json,string,unicode,httpresponse,C#,Json,String,Unicode,Httpresponse,我们一直在努力计算包含Unicode字符的字符串的长度,例如(单词字符,如“,粘贴到我们系统的文本区域中,然后保存)。当我们需要返回同一个保存的字符串并且需要计算响应内容长度时,正常的c#字符串。长度不能正确计算长度,因为Unicode有多个字符 我们已经尝试使用System.Globalization.StringInfo类读取字符量,但是没有用,因为它仍然没有达到请求的正确长度。例如,Json响应对象的最后一个结束的花括号被浏览器截断,因为长度太短 如果有人能对他们使用过的有用的东西有所启发

我们一直在努力计算包含Unicode字符
的字符串的长度,例如(单词字符,如“
,粘贴到我们系统的
文本区域中,然后保存)。当我们需要返回同一个保存的字符串并且需要计算响应
内容长度
时,正常的
c#
字符串。长度不能正确计算长度,因为Unicode有多个字符

我们已经尝试使用
System.Globalization.StringInfo
类读取字符量,但是没有用,因为它仍然没有达到请求的正确长度。例如,Json响应对象的最后一个结束的花括号被浏览器截断,因为长度太短

如果有人能对他们使用过的有用的东西有所启发,我们将不胜感激。我们迄今为止所做的尝试:

    Response.AddHeader("content-length", content.GetType() == typeof(string) ? 
new System.Globalization.StringInfo(content.ToString()).LengthInTextElements.
ToString() : ((byte[])content).Length.ToString());

给定一个任意的字节块,您知道它代表一些文本,并且使用UTF8编码,了解实际字符数的唯一方法是对文本进行解码。例如,将其传递给
Encoding.UTF8.GetString()
。然后您只需查看返回的
字符串的长度


也就是说,HTTP响应的
Content Length
字段应该以字节为单位指示响应的长度。如果必须自己设置长度,则应使用总字节数。但是,如果您正在使用,例如,我希望此字段将代表您自动设置。

不清楚您在问什么。您有C#字符串、JSON字符串或字节[]吗?您是否对字符数、字节数或打印位置数感兴趣,即如果打印,行的长度?内容长度以字节为单位。那么,是否有可能仅从内容中确定内容长度?它会根据编码的不同而变化吗?如果输出为UTF-8,则长度将不同于UTF-16。也可以是gzip'd。此标头实际上是由web服务器确定的。或者我把内容长度和传输长度混淆了。()我还认为内容长度应该是字节计数!很抱歉,我们正在更改的方法是我们的应用程序正在使用的请求和响应处理程序,它是一个基于请求url的中心HTTP请求处理程序,将从应用程序列表中调用应用程序的相应方法,然后发送回其响应。我发送回来的响应本质上是一个字典,它已被Newtonsoft.Json库序列化为Json字符串,当Json字符串包含Unicode字符时,计算该Json字符串的长度是个问题,我希望更清楚,我同意您的看法,HTTP响应正确地计算了响应的长度,如果我去掉content-length的头,浏览器可以毫无困难地正确构造json对象,因为HTTP响应为您完成了这项工作,但是我们的架构师出于某种原因将content-length头添加到WriteResponse类中。我将继续测试,看看其他所有数据排列的内容长度是否正确,如果正确,我将标记您的答案并更正我们的架构师。