Web开发遇到中文乱码[实战]

1、关于编码常识

(1)UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立

(2)Tomcat服务器编码,默认是ISO8859-1

2、排查路径

(1)Nginx,如果你的项目有经过Nginx代理

 1 upstream you.domainName.com {
 2     server 127.0.0.1:8081;
 3 }
 4 server {
 5   listen      80;
 6   server_name  you.domainName.com;
 7   charset utf-8; 
 8 
 9   location /examples {
10       return 403;
11     }
12 }

(2)Tomcat

找到Tomcat的配置文件

1 <Server port="8005" shutdown="SHUTDOWN">
2     <!-- 其他配置  -->
3     <Service name="Catalina">
4           <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />   
5           <!-- 其他配置  -->
6     </Service>
7 </Server>

(3)GET

String productTypeName=request.getParameter("productTypeName");
byte[] bytes=str.getBytes("ISO-8859-1");
productTypeName=newString(bytes,"utf-8");

(4)POST

request.setCharacterEncoding("utf-8");

tip:这个是我自己项目遇到的,由于生产是Linux环境,修改了nginx和tomcat,包括post方式都不行,所以怀疑是linux环境下tomcat的问题

在配置文件/usr/local/tomcat/bin/catalina.sh

解决办法:修改Tomcat的bin目录下的catalina.sh文件,找到以下代码:

if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"

修改为

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"

这应该是linux初始化没有设置到,既然遇到了做下记录,共勉

原文地址:https://www.cnblogs.com/zhuziyu/p/9395568.html