Java web项目Linux下部署的中文乱码问题

转载:https://blog.csdn.net/qq_28039297/article/details/76686022

我们项目的开发是在windows下完成的。 
然后导出.sql数据库文件,并导出war包,准备部署到linux下的tomcat服务器上。 
部署完成出现中文问题:

问题描述: 
1.数据库中原有的数据都能正常显示 
2.新添加数据时出现问题,中文显示为问号:???

问题的解决过程: 
一、项目中默认编码设置是UTF-8 
二、项目开发环境Eclipse的编码方式是UTF-8(确保代码中的中文显示正常) 
三、Tomcat配置: 
更改两个文件的配置 
1.server.xml

添加 URIEncoding="UTF-8" ,这个是为了解决get请求参数或者路径带中文的时候的编码问题,在windows下如果不添加这个,get请求出现中文参数或者路径一样会出问题,如果是路径,会404,如果是参数,会乱码
  •  
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
  •  
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8"/>
  •  

2.web.xml

 <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>

默认tomcat7中上面这段代码在注释中,把它注释去掉。 
重启tomcat使配置生效。 
当然如果项目本身post请求的编码集有设置,这步不需要也可以

四、mysql配置 
如果本身数据库编码集已经是UTF-8,这步可以省略,这步是针对编码集没有修改,使用默认的拉丁的编码集 或者其他编码集去弄的。

提示:如果MySQL数据库的版本比较高的话(比如5.7版本),请参考:

https://www.cnblogs.com/ClassNotFoundException/p/6090357.html
1.修改mysql默认配置: 
默认的mysql配置:server、client都是latin1,对中文是不支持的,这里改为utf8 
方法: 
修改配置文件:

#vim /etc/mysql/my.cnf 
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

重启mysql

/etc/init.d/mysql restart
  •  

检查编码方式: 

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |(*重点)
| character_set_connection | utf8                       |(*重点)
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |(*重点)
| character_set_server     | utf8                       |(*重点)
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
  • 2.修改项目使用的数据库的配置 
    修改此数据库的编码方式为utf8(默认是latin1)
mysql> alter database 数据库名 character set utf8;
  • 查看此数据库的编码:
mysql> status
  •  
Connection id:        41
Current database:    tslcrms
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.5.38-0ubuntu0.14.04.1 (Ubuntu)
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8        (*重点)
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:            53 min 14 sec
mysql> show create database tslcrms;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| tslcrms  | CREATE DATABASE `数据库名` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+

3.导入数据库文件中的表、字段的编码方式都修改成utf8 
可以直接改.sql文件,改完导入。 
也可以先导入,再用命令查看和更改。

附:在mysql中使用命令修改字符集:

mysql> SET character_set_client = utf8 ;
  •  
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;
SET NAMES 'utf8';
相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

 关于字符集编码问题(get/post请求,tomcat有不同的处理)的解释,请参考:

https://blog.csdn.net/u014201499/article/details/71553707

猜你喜欢

转载自blog.csdn.net/u011109589/article/details/85368582
今日推荐