该请求是客户发送给您的。您无法选择他发送的内容,这是您的输入。但是,客户端可能应该以包含表单的页面上定义的编码发送此输入。
您是否在页面上正确设置了字符集?你确定你不发送例如
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
在 HTML 标头中,而数据采用不同的编码?
在评论后添加:如果我理解正确,您正在以不同于 UTF-8 的编码生成输出页面(您确定需要这样做吗?)。之后,您在解码 POST 回的表单数据时遇到问题。最简单的方法是确保数据以 UTF-8 回发。为此,HTML 定义accept-charset
了form
. 但是,IE 不支持该属性。对于 IE,有一个hack:你可以尝试添加一个包含任何“奇怪”Unicode 字符的假冒<input>
,以强制 IE 发布为 UTF-8。
这不是很好,一个更简单的解决方案就是始终使用 UTF-8——你真的需要为你的输出页面使用不同的编码吗?
或者,如果您确实需要以另一种编码输出数据,您的设置解决方案Request.ContentEncoding
是 AFAIAA 唯一可以使用的方法。要确定使用的编码,我建议添加一个 POST 回的隐藏字段(理论上,您可以使用 HTTP 标头,但我认为浏览器不会将它们与 POST 数据一起发送),以使用如下内容:
public void Application_BeginRequest(object sender, EventArgs args)
{
var inputEncoding = Request.Form["hiddenEncoding"];
if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
}