小编典典

将请求参数作为UTF-8编码的字符串传递

jsp

我正在创建一个简单的登录页面,我想将登录名和密码参数作为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>

阅读 375

收藏
2020-06-08

共1个答案

小编典典

pageEncoding只设置响应的字符编码和charset所述HTTP的属性Content- Type标题中。基本上,它告诉服务器将JSP生成的字符解码为UTF-8,然后再发送给客户端,而标头则告诉客户端使用UTF-8对其进行编码,并且当同一页面中的任何形式为提交回服务器。在contentType已经默认为text/html,所以下面就足够了:

<%@page pageEncoding="UTF-8"%>

通过HTTP提供页面时,将忽略HTML元标记。仅当客户端将页面另存为HTML文件并在本地磁盘系统上 然后file://浏览器中的URI
打开页面时,才使用它。

在您的特定情况下,HTTP请求正文编码显然未设置为UTF-8。在请求中涉及的任何servlet或过滤ServletRequest#setCharacterEncoding()器中
进行 首次调用 之前 ,都需要在servlet或过滤器中设置请求主体编码request.getXxx()

request.setCharacterEncoding("UTF-8");
String login = request.getParameter("login");
String password = request.getParameter("password");
// ...
2020-06-08