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

Calculating length of string that contains Unicode characters

我们一直在努力计算包含 Unicode 字符 e.g (Word characters such as ’) 的字符串的长度,这些字符被粘贴到我们系统的 text-area's 中然后被保存。当我们需要 return 相同的保存字符串并且我们需要计算我们的 Response content-length 时,正常的 c# string.Length 不能正确计算长度,因为 Unicode 有多个字符.

我们已尝试使用 System.Globalization.StringInfo class 来读取字符数量,但无济于事,因为它仍然无法满足请求的正确长度。例如,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()。然后你只看返回的string的长度。

也就是说,HTTP 响应的 Content-Length 字段应该以字节为单位指示响应的长度。如果你必须自己设置长度,你应该只使用总字节数。但是如果你使用例如HttpResponse 我希望系统会自动为您设置此字段。