为什么不能使用response.setContentType("text/html;charset=utf-8");进行中文转码?

为什么不能使用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>

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,老师这边测试是没有问题的,没有出现乱码。

1、建议同学清理一下缓存,如下:

http://img1.sycdn.imooc.com//climg/5fb3ac530955ddc105340205.jpg

清理一下浏览器缓存,或者换个浏览器访问试试。

2、在TestServlet类中由于返回的是jsp页面,所以同学可以使用response.setContentType("text/html;charset=utf-8");同学修改代码后,再重启服务器,访问试试。

  • 叶锦辉 提问者 #1
    我试过了,不行,而且我还重启了eclipse
    2020-11-18 20:59:07
  • 好帮手慕阿慧 回复 提问者 叶锦辉 #2
    同学你好, 1、同学按照4-3 解决Get请求与响应中文乱码,配置一下Tomcat试试。课程链接为 https://class.imooc.com/lesson/1340#mid=31436 2、同学可以新建一个web项目,再测试试试。 祝学习愉快~
    2020-11-19 09:43:56
  • 叶锦辉 提问者 回复 好帮手慕阿慧 #3
    我的是Tomcat8.5应该不用配置吧
    2020-11-19 10:04:38
好帮手慕阿慧 2020-11-17 14:15:12

同学你好,

1、setContentType()方法除了可以设置响应字符的编码方式还能设置文档内容的类型。

response.setContentType("text/html;charset=utf-8");是响应的字符编码是utf-8,且响应的类型是html类型。如果service()方法中响应的类型不确定,例如可能是application/json,text/plain等,那么就不能使setContentType()方法。

2、同学如果只需要设置字符编码,应该调用setCharacterEncoding()方法。

参考代码如下:

​response.setCharacterEncoding("utf-8");
  • 提问者 叶锦辉 #1
    但是为什么这个项目我设置了response.setCharacterEncoding("utf-8");就是不显示中文,还是乱码?我这个项目是跳转到网页中显示的
    2020-11-17 18:20:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师