>我正在使用 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 无法更新预订。错误信息:
我应该怎么做才能启用俄语符号?
不,您没有使用 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)