IIS收到UTF-8 POST作为ASCII

时间:2018-02-22 20:05:10

标签: post utf-8 iis-10

我有一个网页(Windows 10下的IIS版本10.0.16299.15),其head元素包含:

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

在此页面中,我使用jQuery进行POST

$.ajax({
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    type: "POST",
    url: "hierarchy.lib.asp?action=save",
    data: {
        nameFrench: $("#frenchName").val()
    },

    ...

我知道UTF-8是默认设置,但我在尝试解决此问题时明确设置了它。

POSTed值是“Écrou”。 Javascript中的断点显示“Écrou”正在发布。

当我收到发布的数据时,结果似乎是ASCII编码的。

dim value: value = request.form("nameFrench")

变量value现在包含值“Écrou”(在使用Visual Studio进行调试时选中)。

IIS是否错误地使用ASCII编码值而不是POSTed UTF-8字符串对请求集合进行编码?

我知道IIS 7.5中存在这样的错误: https://www.redolive.com/utah-web-designers-blog/how-to-fix-utf-8charset-problem-with-iis-7-5-and-php-fastcgi/

思想?

修改

如果我更换:

<%@ Language="VBScript" %>

使用:

<%@ Language="VBScript" codepage=65001 %>

然后我在jQuery的ajax上发布的值在服务器端接收时是正确的。但是,此更改会破坏使用标准HTML表单的POSTing,即使是使用元标记声明它们是UTF-8页面的网页。

我尝试将Ajax调用更改为POST,就像windows窗体一样:

contentType: "application/x-www-form-urlencoded",

但这并不能解决问题。

我也尝试过:

contentType: 'Content-type: text/plain; charset=iso-8859-1',

contentType: 'Content-type: text/plain; charset=windows-1252',

当我使用8859使用jQuery ajax进行POST时(除了html元标记之外没有更改任何内容)POST完全为空,根本没有任何正文发送到服务器!

在服务器端,如果我选中Session.CodePageresponse.CodePage,则返回1252.

1 个答案:

答案 0 :(得分:0)

我重新阅读了Ajax的jQuery文档。我以前似乎误读了它们。虽然您可以设置contentType并更改POST标头,但它似乎不会强制浏览器使用您指定的编码对数据进行POST。它确实改变了POST的内容,但它没有正确地(至少根据我的预期)重新编码发布的数据。

所以我必须将此<%@ Language="VBScript" %>更改为此<%@ Language="VBScript" codepage=65001 %>,并确保我的网页使用<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

...顺便说一下,我的现有HTML表单似乎与POST用户输入的重音字符不兼容。当我以这种方式发布时,服务器端的request.form集合似乎是ASCII编码的(重音字符替换为?)。