什么决定了从HTTP POST收到的数据的编码?

时间:2011-11-07 17:20:16

标签: web-applications post character-encoding

有一种关于字符编码的机制我并不熟悉,我想详细了解发生了什么,我想知道如何控制我的webapp中的内容。

当用户在我的网站上粘贴非ASCII字符(例如“äæéà”)时,请说明一个表格然后才能发布,确切发生了什么以及如何确定?

例如,如果我使用charset iso-8859-1转到HTML页面:

<HEAD>
 <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">

我将“äæéà”切换到一个使用Unicode字符的窗口,我看到正确的“äæéà”字符

我不完全清楚那里发生了什么:浏览器在读取iso-latin-1编码页面时将字符转换为某些编码,然后在将它们粘贴到另一个窗口时再次转换这些字符?

我是否可以通过编程方式“强制”在网页上发布表单时应使用的编码?

浏览器是否负责正确发送/编码字符?

我可以强制使用表单中使用的编码与网页中使用的编码不同吗? (例如,允许以UTF-8进行POST,即使该页面位于iso-latin-1中......请注意,我不想这样做,只是要了解它在幕后发生了什么)。

我想我的问题可以归结为:“我该怎么办才不会遇到编码问题?”但是如果有人可以向我解释上述情况,我会有一个更清晰的画面发生了什么事。

1 个答案:

答案 0 :(得分:2)

浏览器将使用与包含要提交的表单的页面的HTTP charset响应标头的Content-Type属性中指定的编码相同的编码。您可以在其他Firebug的帮助下为自己的网站确定它:

enter image description here

只有在整个HTTP <meta>响应标头完全不存在时才会使用Content-Type标记中的标记,这可能在服务器未设置时发生(这是非常不可能的),或者当您将网页保存到本地磁盘文件系统,然后通过file://协议从中查看时。

因此,如果您有字符编码问题,显然您(或您的服务器)未在HTTP charset响应标头中设置Content-Type属性。在这种情况下,浏览器将自己决定使用什么字符集,这通常是平台默认字符集,但在某些情况下(例如Firefox)基于基于网页内容的“智能猜测”。 <meta>标记中的一个是一个很好的后备,但在通过HTTP提供页面时不会使用它。

在你的问题历史中,我看到你是一名Java开发人员,因此你可能正在处理JSP / Servlet页面(或基于JSP / Servlet的框架),在这种情况下你可能会发现这篇文章很有用:{{3 }}