`

request.setCharacterEncoding("UTF-8")失效问题

 
阅读更多

request.setCharacterEncoding("UTF-8");

 

在服务器端,要转变请求的字符串编码,用request.setCharacterEncoding("UTF-8");这个方法要放在jsp代码的request.getParameter()方法前面。如

<%@page contentType="text/html" pageEncoding="GBK" session="false"
%><%
		request.setCharacterEncoding("UTF-8");
		String username = request.getParameter("username");
		System.out.println("userName;--->" + username);
		response.setCharacterEncoding("UTF-8");
		System.out.println("---------------------------------------");
		username = request.getParameter("username");
		System.out.println("after request set encoding userName;--->" + username);
		

		}

		%>

 如果不是getParameter()前面,比如放在

String username = request.getParameter("username");
		System.out.println("userName;--->" + username);

 

后面的话,request.setCharacterEncoding("UTF-8");这句转码等于没转,具体原因还没研究清楚。不过,可以放在String queryString = request.getQueryString()的后面,比如:

<%@ page contentType="text/html;charset=GBK"  %><%
String queryString = request.getQueryString();
String reqEnc = getQueryValue(queryString,"req_enc=");
if(reqEnc!=null){
    request.setCharacterEncoding(reqEnc);
}
String respEnc = getQueryValue(queryString,"resp_enc=");
if(respEnc!=null){
    //out.println(respEnc);
    response.setCharacterEncoding(respEnc);
}
%><%!String getQueryValue(String queryString,String key){
    if(queryString==null || queryString.length()==0)return null;
    int reqIdx = queryString.indexOf(key);//req_enc=utf-8&resp_enc=gbk
    String enc = null;
    if(reqIdx!=-1){
        reqIdx = reqIdx+key.length();
        int endIdx = reqIdx;
        for (;
        endIdx < queryString.length() && queryString.charAt(endIdx)!='&';
        endIdx++) {
        }
        if(endIdx>reqIdx){
            enc = queryString.substring(reqIdx,endIdx);
            if(!enc.equalsIgnoreCase("gbk")
                    && !enc.equalsIgnoreCase("utf-8")){
                enc = null;
            }else{
                System.err.println("error :"+key+" is "+ enc);
            }
        }
    }
    return enc;
}%>

 

request.setCharacterEncoding(reqEnc);就是要放在request.getParamter()方法前面才会生效。

 

 

分享到:
评论

相关推荐

    JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题

    当你在过滤器中调用`request.setCharacterEncoding("UTF-8")`时,它会确保POST请求的数据按照UTF-8格式进行解码,从而避免乱码的出现。这是因为POST请求的数据是在请求体中传递的,可以被这个方法覆盖其默认编码。 ...

    对Servlet 中 request.setEncoding("utf-8")的分析

    当调用`request.setEncoding("utf-8")`时,实际上是调用了`Request`类的`setCharacterEncoding`方法。这个方法首先检查一个布尔变量`usingReader`。如果`usingReader`为`true`,则意味着已经调用了`getReader()`...

    UTF-8编码转化(Visual Basic)

    Dim utf8String As String = System.Text.Encoding.UTF8.GetString(utf8Bytes) ``` 5. **处理XML文件**: XML文件通常使用UTF-8编码。在处理XML时,需要确保`XmlDocument`或`XDocument`加载和保存时使用正确的...

    Web开发关于UTF-8的问题总结.docx

    CREATE TABLE table_name (...) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` - 查询数据时,确保连接也使用UTF-8编码,例如在PHP中: ```php mysqli_set_charset($conn, "utf8mb4"); ``` 4. JS...

    requests-2.22.0-py2.py3-none-any.whl

    网站:https://pypi.org/project/requests/#files 下载requests-2.22.0-py2.py3-none-any.whl

    Jsp页面中的字符编码方式与乱码解决方法

    3. request.setCharacterEncoding("UTF-8") request.setCharacterEncoding 方法用来指定对客户端请求进行编码的方式。该方法用来指定对浏览器发送来的数据进行编码的编码方式。 4. response.setCharacterEncoding...

    MyEclipse中文乱码问题简单解决方案,不需任何编码转化

    &lt;%request.setCharacterEncoding("utf-8");%&gt;` 这段代码设置了页面的编码方式为 UTF-8,并将 request 对象的编码方式设置为 UTF-8。 2. 如果使用 Servlet,在 doPost 或 doGet 方法的第一行添加以下代码: `...

    jsp编码 jsp乱码

    例如,在jsp页面中指定request.setCharacterEncoding("UTF-8"),那么服务器将使用UTF-8编码对客户端请求进行重新编码。 4. 使用response.setCharacterEncoding方法 使用response.setCharacterEncoding方法可以解决...

    jsp连接MySQL实现插入insert操作功能示例

    下午终于实现了jsp连接MySQL执行插入操作的功能。在index.jsp页面输入数据,提交到mysql——insert.jsp页面进行插入... request.setCharacterEncoding(“UTF-8”); response.setCharacterEncoding(“UTF-8”); respo

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...

    web乱码解决web乱码解决

    3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。该方法用来指定对浏览器发送来的数据进行重新编码(或者称为解码)时,使用的编码。 4、response.setCharacterEncoding(...

    JSP在Servlet中的几个编码的作用及原理 .txt

    request.setCharacterEncoding("UTF-8"); ``` 这样做的目的是确保服务器能够正确解读客户端发送过来的请求参数。如果没有正确设置,可能会导致客户端传来的中文参数出现乱码。 #### 4. response.setCharacter...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    factory.setRepository(new File("D:\\Tomcat 5.5\\webapps\\drp1.2\\tempimages")); ServletFileUpload upload = new ServletFileUpload(factory); // maximum size before a FileUploadException will be ...

    commons-fileupload-1.3.3.jar commons-io-2.5.jar

    4. **解析请求**:使用`ServletFileUpload.parseRequest()`方法解析HTTP请求,这将返回一个`FileItemIterator`,你可以遍历这个迭代器来获取每个上传的文件或表单字段。 5. **处理文件项**:对于每个`FileItem`对象...

    jmeter-grpc-request-1.1.2.jar

    jmeter压测grpc接口需要的jar包

    Tomcat中Get和Post出现乱码的解决办法

    1. 将 GET 请求改成 POST 请求,然后使用 request.setCharacterEncoding 方法设置编码,并使用 request.getParameter 方法直接获得中文请求参数。 2. 在 Servlet 中使用以下代码来得到中文请求参数:String name = ...

    Git-2.33.0.2-x64-bit

    安装详见“https://blog.csdn.net/Passerby_Wang/article/details/120767020?ops_request_misc=&request_id=&biz_id=102&utm_term=git%202.33.0.2&utm_medium=distribute.pc_search_result.none-task-blog-2~all~...

    多文件上传例子(解决中文乱码)

    2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在jsp里用java.net.URLDecoder.decode(request.getParameter("str"),"UTF-8")。 5、最容易忽略的...

    解决Tomcat中文乱码

    request.setCharacterEncoding(encoding); } } // Pass control onto the next filter chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { ...

    JSP在Servlet中的几个编码的作用及原理

    例如,如果客户端以UTF-8编码发送数据,那么在服务器端也应使用`request.setCharacterEncoding("UTF-8")`来确保数据的正确解读。 ### response.setCharacterEncoding("UTF-8") 与`request.setCharacterEncoding`相...

Global site tag (gtag.js) - Google Analytics