ajax返回中文,页面显示成问号

场景:
基本所有地方都设置为utf-8

页面中

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


filter中
httpResponse.setCharacterEncoding(encoding); // encoding为utf-8
httpResponse.setContentType("text/html; charset=utf-8");

<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>



服务器端中文都是正确的
客户端中文全是问号"?",一个中文字对应一个问号

原因
推测为服务器端和客户端的编码方式不一样

解决方法
给servlet和action的response都加上
response.setCharacterEncoding("utf-8");

ps
不知道为什么这么做就ok,每个servlet和action都要加,特别麻烦
上面的filter中已经加了一次了,貌似没有起作用,可能对filter理解还有问题


问题补充:
@lovewhzlq
有点理解了,难道不能用filter处理这种问题吗?
或者说是有别的方法可以处理
只能是每次都再写一遍吗
问题补充:
@lovewhzlq
谢谢啦
我把print相关的都抽出来写了个方法放在BaseServlet中了。

你可以搞个servlet基类,里面预先做一下
httpResponse.setCharacterEncoding(encoding); // encoding为utf-8

httpResponse.setContentType("text/html; charset=utf-8");
然后你自己写的servlet都继承于这个基类就能搞定了啊,

在servlet里面加上就可以了,ajax传输是以utf-8的格式传输的

filter是请求到达前做一次处理,请求完成后再做一次处理,
而# httpResponse.setCharacterEncoding(encoding); // encoding为utf-8

httpResponse.setContentType("text/html; charset=utf-8"); 必须在请求处理完成前设置才能有效的,所以用filter是不行的,