1
Strikeactor 2016-03-07 22:37:45 +08:00 1
你输出的内容要不加个<meta charset="utf-8"> 试试。。
|
2
xmh51 2016-03-07 22:39:49 +08:00
额,你这都不是标准 html 网页吧。
|
3
yvanhe OP @Strikeactor 在哪加? JSP 里有写<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 请求 servlet 后什么也没做,就是 forward 到原先的这个 jsp
|
5
AccIdent 2016-03-07 22:47:43 +08:00 1
目测是 web 容器的问题
|
6
Strikeactor 2016-03-07 22:48:10 +08:00
|
7
yvanhe OP @Strikeactor
加了,还是一样,你这句应该和我原先写的<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">效果一样吧。。 |
9
yvanhe OP 网页里是<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Response Headers 里是 Content-Type:text/html;charset=ISO-8859-1 |
10
Sharuru 2016-03-07 23:24:22 +08:00 via Android
试试 tomcat 8
|
12
hpeng 2016-03-07 23:55:51 +08:00 via iPhone 1
Tomcat 里面配置编码
|
13
SoloCompany 2016-03-08 00:12:17 +08:00 1
不贴 Servlet 源代码的都是耍流氓
我告诉你个不用管你 Servlet 代码的方法,就是在 test.jsp 前面加上 ContentType 强制 <c:set target=“${pageContent.response}” property=“ charset ” value=“ UTF-8 ” /> 加 meta 是没有用的,因为 Content-Type 声明的 charset 是最高优先级的,请参考 HTML specification |
14
yvanhe OP @SoloCompany servlet 里就一句 forward 到 test.jsp 的代码
|
15
DRcoding 2016-03-08 09:08:00 +08:00 1
修改 server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8" /> |
16
yvanhe OP |
17
yvanhe OP @SoloCompany
我在 jsp 里加了 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page isELIgnored="false"%> <c:set target= "${pageContent.response}" property="charset" value="UTF-8" /> 报错, javax.servlet.jsp.JspTagException |
18
yvanhe OP @Strikeactor
@xmh51 @AccIdent @Sharuru @hpeng @SoloCompany 解决了,万万没想到 Bug 产生的原因是这样的: 用 Eclipse 新建 servlet 的时候, doGet()里自动生成了一句代码: response.getWriter().append("Served at: ").append(request.getContextPath()); 删掉这行代码,或者在这行代码前面加上 response.setCharacterEncoding("UTF-8"); 乱码就解决了…… Response Headers 里面的 Content-Type 就变回了"text/html;charset=UTF-8"而不是之前诡异的"iso8859-1" 我在网上搜到 “设置服务器端的编码 response.setCharacterEncoding("utf-8 ”); 默认是 ISO-8859-1 ;该方法必须在 response.getWriter()之前进行设置” 之前 response.setCharacterEncoding("UTF-8");是加在 service()方法里的,没起作用,可能因为 doGet()方法调用在 service()方法之前,那时候已经调用了 response.getWriter()方法,编码变成了默认的 iso8859-1 。 为什么 response.setCharacterEncoding("utf-8 ”);必须在 response.getWriter()之前进行设置? |