首先按照常规的排查流程逐个进行配置,都是无效果的:
1、检查了tomcat的conf/server.xml里Connector标签有无配置URIEncoding="UTF-8",添加了配置,无效;
2、tomcat/bin/catalina.bat,添加了JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"配置,无效;
3、tomcat/conf/web.xml,添加filter过滤器,无效;
4、代码里自定义过滤器,强行设置请求为UTF-8,无效。
结合日志打印,发现请求的编码格式确实是UTF-8,但是中文就是乱码。。。于是怀疑是服务器的配置问题,终于给我查出来了。
Linux 系统的 Locale 决定了软件运行时的语言环境、地域文化习惯和字符编码设置,直接影响着界面语言、时间/日期/货币格式、以及最重要的字符显示与处理。
查询服务器的locale,发现输出均为POSIX,经查询得出该配置为服务器最小化支持的字符集,也就无法识别中文字符。
于是尝试修改服务器的locale(ubuntu环境):
1、使用sudo locale-gen en_US.UTF-8,生成UTF locale字符集
2、修改/etc/default/locale文件,添加一行echo 'LANG="en_US.UTF-8"' | sudo tee /etc/default/locale
3、更新系统环境 source /etc/default/locale
4、重新建立ssh会话连接,检查locale是否变为en_US.UTF-8,正常情况下输出均为en_US.UTF-8
5、重启tomcat
重新验证请求,发现中文参数终于可以正常处理了。