我可以使用其身体以外的编码发送POST表单吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以使用其身体以外的编码发送POST表单吗?相关的知识,希望对你有一定的参考价值。
我有一个html页面,看起来像:
<HTML>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
<BODY onload='document.forms[0].submit();'>
<form name="form" method="post" action="/path/to/some/servlet">
<input type="hidden" name="username" value="麗安"> <!-- UTF-8 characters -->
</form>
</BODY>
</HTML>
正如您所看到的,此页面的内容是UTF-8,但我需要使用GB2312字符编码发送它,因为我发送此页面的servlet是我期望的GB2312。
这是一个有效的场景吗?因为在servlet中,我无法使用将字符编码设置为GB2312的过滤器来检索这些中文字符!
我已经创建了一个示例Servlet:
package org.daz;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EncodingServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String ENCODING = "GB2312";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
setCharacterEncoding(request, response);
String username = request.getParameter("username");
System.out.println(username);
}
private void setCharacterEncoding(HttpServletRequest request, HttpServletResponse response)throws IOException{
request.setCharacterEncoding(ENCODING);
response.setCharacterEncoding(ENCODING);
}
}
输出是:楹��
答案
这是不可能的。您需要从头开始使用GB2312字符,或者将整个应用程序更改为仅使用UTF-8。您无法将字符编码X转换为字符编码Y。 ASCII范围之外的任何字符都可能被破坏。
一些建议的表单的accept-charset
属性被大多数webbrowsers忽略。 W3 spec也字面上说“用户代理可以解释......”,而不是“必须”。即使这样,它也只会用于编码实际的用户输入,而不是像示例中的隐藏字段。它们已经在页面自己的编码中编码(在本例中为GB2312)。换句话说,在浏览器处理页面时,那些UTF-8字符已经损坏。
另一答案
你可以尝试这样做,
<form name="form" method="post" action="/path/to/some/servlet" charset="gb2312" accept-encoding="gb2312">
<input type="hidden" name="username" value="麗安"> <!-- UTF-8 characters -->
</form>
它可能适用于某些浏览器。但是,浏览器不需要支持GB2312,因此您的里程可能会有所不同。
另一答案
<form accept-charset="gb2312"
http://www.w3.org/TR/REC-html40/interact/forms.html#adef-accept-charset
以上是关于我可以使用其身体以外的编码发送POST表单吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 AJAX + 多部分表单数据 + UTF-8 编码发送文件和文本