为什么不能使用response.setContentType("text/html;charset=utf-8");进行中文转码?
# 具体遇到的问题
为什么不能使用response.setContentType("text/html;charset=utf-8");进行中文转码?
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
package com.jin.servlet.word;
import java.io.IOException;
import java.util.HashMap;
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 TestServlet
*/
@WebServlet("/test/servlet")
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
HashMap<String, String> map = new HashMap<String, String>();
map.put("apple", "苹果");
map.put("banana", "香蕉");
map.put("pear", "梨");
String use = request.getParameter("use");
String mesg = "";
if (map.containsKey(use)) {
mesg = map.get(use);
request.getRequestDispatcher("/word/success.jsp?mesg=" + mesg).forward(request, response);
} else {
mesg = "没有找到对应的单词解释!";
request.getRequestDispatcher("/word/fail.jsp?mesg=" + mesg).forward(request, response);
}
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/servlet_advanced_text/test/servlet" method="get">
<input name="use" placeholder="请输入要查询的单词" /> <input type="submit"
value="查询" />
</form>
</body>
</html>
fail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<h1 style="color: red;">${param.mesg }</h1>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 style="color: blue;">${param.mesg }</h1>
</body>
</html>
在这里输入代码,可通过选择【代码语言】突出显示
正在回答
同学你好,老师这边测试是没有问题的,没有出现乱码。
1、建议同学清理一下缓存,如下:
清理一下浏览器缓存,或者换个浏览器访问试试。
2、在TestServlet类中由于返回的是jsp页面,所以同学可以使用response.setContentType("text/html;charset=utf-8");同学修改代码后,再重启服务器,访问试试。
同学你好,
1、setContentType()方法除了可以设置响应字符的编码方式还能设置文档内容的类型。
response.setContentType("text/html;charset=utf-8");是响应的字符编码是utf-8,且响应的类型是html类型。如果service()方法中响应的类型不确定,例如可能是application/json,text/plain等,那么就不能使setContentType()方法。
2、同学如果只需要设置字符编码,应该调用setCharacterEncoding()方法。
参考代码如下:
response.setCharacterEncoding("utf-8");
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星