asp.net HttpResponse中的StatusDescription编码

4szc88ey  于 2023-04-22  发布在  .NET
关注(0)|答案(2)|浏览(122)

我正在使用C#并将错误消息写入HttpResponse StatusDescription,以防发生异常。内部我使用另一个服务,不幸的是,它会返回俄语的错误描述。而这个俄语错误消息我必须在HttpResponse StatusDescription中返回。我使用UTF-8编码并以这种方式编写:

var message = exception.Message.Substring(0, Math.Min(exception.Message.Length, 512));
var encodedBytes = Encoding.UTF8.GetBytes(message);

response.StatusDescription = Encoding.UTF8.GetString(encodedBytes);

但这并没有帮助。在Fiddler中,encoding似乎有问题:
HTTP/1.1 500无法更新保留。错误消息:��
我应该怎么做才能启用俄语符号?

hyrbngr7

hyrbngr71#

不,你没有使用UTF-8编码。你在使用它之前使用它来编码和解码字符串,所以这一步是没有意义的。你的代码做的是一样的:

response.StatusDescription =
  exception.Message.Substring(0, Math.Min(exception.Message.Length, 512));

无论如何,你不能对HTTP头使用UTF-8编码,它们只是纯文本。把错误消息放在响应正文中,因为你可以为它指定一个编码。

vmjh9lq9

vmjh9lq92#

实际上,有一种方法可以做到这一点:将其编码为URI字符串。

Response.StatusDescription = Uri.EscapeUriString("Your message here");

你必须在客户端用ECMAScript解码响应:
decodeURIComponent(r.statusText)

相关问题