javaweb乱码深究

未使用任何框架(比如:springmvc),原生servlet,现在遇到乱码问题。

package com.deepweb.charset;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CharSet
 */
@WebServlet("/CharSet")
public class CharSet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CharSet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String text = request.getParameter("text");
        System.out.println(text);
        response.getWriter().print(text);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

请问我浏览器输入相应地址后,为什么System.out.print打印出来是乱码而浏览器显示正常?

阅读 2.3k
1 个回答

QueryString默认使用的是ISO-8895-1的编码或者是Header中ContentType中定义的Charset,如果你没有设置这些,后台通过request获取到的参数就是乱码。
可以使用

String text = String(request.getParameter("text").getBytes("iso-9985-1"),"utf-8";)

获取到正确的值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进