我有一个支持多种语言的页面(用户可以随时更改语言)。
我根据初始化文化方法中的用户选择更新线程的文化。

我还根据所选国家 /地区的代码页面更新响应对象,并将其Charset设置为所用编码的WebName(如果我不基于代码页面更新响应对象,则将数据绑定到控件的数据被弄乱)。资源文件也基于代码页面进行本地化。

进行上述更改后,该页面在浏览器中正确显示。

但是,当用户以一种亚洲语言输入数据时,文本都会混乱。下拉列表实际上抛出了无效的回调或后备参数异常。

在检查请求时,我发现它仍然是UTF-8(在web.config中设置)。

如果我更改请求。在开始期间的contencencoding,则输入正确。但是我不确定用户在页面周期的早期选择语言。

上述方法是正确的方法吗?如何动态设置传入请求的编码?

有帮助吗?

解决方案

该请求是客户的要求 发送 你。您不能选择他发送的内容,这是您的输入。但是,客户端可能应在包含表单的页面上定义的编码中发送此输入。

您是否正确设置了页面上的炭?您确定不发送

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

在HTML标题中,数据在不同的编码中?

在评论后添加: 如果我正确理解它,您正在以与UTF-8不同的编码生成输出页面(您确定需要这样做吗?)。之后,您在解码已发布的表单数据时遇到问题。最简单的方法是确保数据回到UTF-8中。为此,HTML定义了 accept-charset 属性打开 form. 。但是,IE不支持该属性。对于IE,有一个 黑客: :您可以尝试添加假货 <input> 包含任何“奇怪”的Unicode字符,以强迫IE作为UTF-8。

哪个不是很好,更简单的解决方案将只是始终使用UTF-8 - 您真的需要为输出页面使用不同的编码吗?

或者,如果您确实需要在另一个编码中输出数据,则您的设置解决方案 Request.ContentEncoding 是afaiaa是您唯一可以使用的方法。为了确定所使用的编码,我建议添加一个隐藏的字段(从理论上讲,您可以使用HTTP标头,但我认为浏览器不会将其发送给已张贴的数据),以使用类似的内容:

    public void Application_BeginRequest(object sender, EventArgs args)
    {
        var inputEncoding = Request.Form["hiddenEncoding"];
        if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top