我正在创建一个简单的登录页面,我想将登录名和密码参数作为UTF-8编码的字符串传递。正如您在下面的代码中看到的那样,第一行是我将编码设置为UTF-8的位置,但这似乎毫无意义,因为它不起作用。当我在重音符号中使用登录名和密码参数时,结果页面会收到奇怪的字符。
如何以一种适用于所有浏览器的方式正确设置字符编码?
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>My Page</title> </head> <body> <h1>Welcome to My Page</h1> <form name="login" action="login.jsp" method="POST"> Login:<br/> <input type="text" name="login" value="" /><br/> Password:<br/> <input type="password" name="password" value="" /><br/> <br/> <input type="submit" value="Login" /><br/> </form> </body> </html>
在pageEncoding只设置响应的字符编码和charset所述HTTP的属性Content- Type标题中。基本上,它告诉服务器将JSP生成的字符解码为UTF-8,然后再发送给客户端,而标头则告诉客户端使用UTF-8对其进行编码,并且当同一页面中的任何形式为提交回服务器。在contentType已经默认为text/html,所以下面就足够了:
pageEncoding
charset
Content- Type
contentType
text/html
<%@page pageEncoding="UTF-8"%>
通过HTTP提供页面时,将忽略HTML元标记。仅当客户端将页面另存为HTML文件并在本地磁盘系统上 然后 由file://浏览器中的URI 打开页面时,才使用它。
file://
在您的特定情况下,HTTP请求正文编码显然未设置为UTF-8。在请求中涉及的任何servlet或过滤ServletRequest#setCharacterEncoding()器中 进行 首次调用 之前 ,都需要在servlet或过滤器中设置请求主体编码request.getXxx()。
ServletRequest#setCharacterEncoding()
request.getXxx()
request.setCharacterEncoding("UTF-8"); String login = request.getParameter("login"); String password = request.getParameter("password"); // ...