网上很多解决方案,有说该server.xml的,有说该log4j.properties的
不过我按这些改了都没生效。不过我也确实是改了上面的两个文件,至于对修改成功的结果有没有起到作用我也不知道,所以大家如果按我这个方法没用的话再试试其他的吧
catalina.sh
/$LOGGING_MANAGER
,按n
键查找下一条,直到找到下面的代码:if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
fi
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
fi
重启tomcat
这个是针对展示页面乱码问题
加上URIEncoding
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
还有一种可能,就是tomcat部分日志出现中文乱码,而且这部分日志都是打印的调用http请求后返回的值,这个时候很可能是代码方面的原因
强烈建议response加上响应头,响应方返回Response的时候:
response.setContentType("application/json;charset=utf-8");
纠结我两天的日志乱码问题,原因就是这个,重点就是这个charset
这是响应方需要做的事,请求方拿到了相应后,也要注意这个问题,比如使用HttpClient,解析返回的Response
CloseableHttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, StandardCharsets.UTF_8);
Spring中使用RestTemplate的话,高版本应该没这个问题,至少我没遇到过。
@Bean
public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
//设置日期格式
ObjectMapper objectMapper = new ObjectMapper();
SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd");
objectMapper.setDateFormat(smt);
mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
//设置中文编码格式
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.APPLICATION_JSON_UTF8);
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
return mappingJackson2HttpMessageConverter;
}
找到
java.util.logging.ConsoleHandler.encoding = utf-8
这行
更改为
java.util.logging.ConsoleHandler.encoding = GBK
或者反过来试试。
如果是tomcat9,把utf-8
的设置去掉或者设置为GBK
查看系统编码是否一致
看看linux系统默认编码和xshell是不是一致,设置utf-8编码,就是上面工具栏的地球标志