状态说明 HttpResponse 中的编码

本文关键字:编码 HttpResponse 说明 状态 | 更新日期: 2023-09-27 17:55:10

>我正在使用 C# 并将错误消息写入 HttpResponse 状态描述,以防发生异常。不幸的是,在内部,我使用另一种服务,该服务以俄语返回错误描述。而这个俄语错误消息我必须在HttpResponse StatusDescrition中返回。我使用 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);

但这无济于事。在《提琴手》中,"提琴"似乎有些不对劲:

HTTP/1.1 500 无法更新预订。错误信息:

我应该怎么做才能启用俄语符号?

状态说明 HttpResponse 中的编码

不,您没有使用 UTF-8 编码。在使用它之前,您正在使用它对字符串进行编码和解码,因此该步骤毫无意义。您的代码执行与以下操作相同的操作:

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

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

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

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

你必须在 ECMAScript 中解码客户端的响应:

decodeURIComponent(r.statusText)