我有一个网页(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.CodePage
或response.CodePage
,则返回1252.
答案 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编码的(重音字符替换为?
)。