JSP页面中文乱码处理

JSP页面中文乱码处理

  1. JSP页面添加 UTF-8
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
  1. Servlet 中添加请求体编码方式 UTF-8
servletRequest.setCharacterEncoding("utf-8");
  1. 取出参数直接使用
String name = req.getParameter("name");

具体代码示例如下:
JSP

<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
    <head></head>
    <body>
        <form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
            name:<input type="text" name="name" /><br />
            file1:<input type="file" name="file1" /><br />
            file2:<input type="file" name="file2" /><br />
            file3:<input type="file" name="file3" /><br />
            <input type="submit" value="上传" />
        </form>
    </body>
</html>

编码过滤器

@WebFilter(filterName = "encodingFilter", urlPatterns = "/*")
public class CharacterEncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("character encoding filter");
        servletRequest.setCharacterEncoding("utf-8");
        filterChain.doFilter(servletRequest, servletResponse);
    }
    @Override
    public void destroy() {
    }
}

Servlet

import org.apache.commons.lang3.StringUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

@WebServlet(name = "upload", urlPatterns = "/upload")
@MultipartConfig(location = "", maxFileSize = -1, maxRequestSize = -1, fileSizeThreshold = 5)
public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        System.out.println("入参 name: " + name);

        for (Part part : req.getParts()) {
            System.out.println("part size: " + part.getSize());
            System.out.println("content type: " + part.getContentType());
            System.out.println("content-disposition: " + part.getHeader("content-disposition"));
            System.out.println("file head: " + getFileHead(part));
            System.out.println("file name: " + getFileName(part));
        }
    }

    private String getFileName(Part part) {
        if (part == null) {
            return null;
        }
        String disposition = part.getHeader("content-disposition");
        if (StringUtils.isEmpty(disposition)) {
            return null;
        }
        String name = StringUtils.substringBetween(disposition, "filename=\"", "\"");
        return name;
    }

    private String getFileHead(Part part) {
        if (part == null) {
            return null;
        }
        try {
            InputStream inputStream = part.getInputStream();
            if (inputStream == null) {
                return null;
            }
            byte[] buf = new byte[4];
            inputStream.read(buf);
            String ret = "";
            for (byte b : buf) {
                int i = Math.abs(b);
                String hex = Integer.toHexString(i & 0xFF);
                if (hex.length() == 1) {
                    ret = ret + "0";
                }
                ret = ret + hex;
            }
            return ret;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  null;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值