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初始化没有设置到,既然遇到了做下记录,共勉