web项目部署到linux服务器上后,中文全乱码

骑着心爱的小摩的在Java的道路上 java开发工程师  2017-12-07 02:13:31
需求:从前台界面上选择一个压缩包(zip,rar)上传;写到服务器指定的目录下;之后用命令解压;读取Excel解析数据入库;最后删除文件夹。

问题: 在windows也就是本地电脑上测试的时候,能将文件写入;在linux下,文件能写入,但是中文全是乱码;
syste.out.print()语句中中文也是乱码。

jsp如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
String contextPath = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>数据导入</title>
<link href="<%=contextPath%>/css/css_bui/dpl.css" rel="stylesheet" />
<link href="<%=contextPath%>/css/css_bui/bui.css" rel="stylesheet" />
<link href="<%=contextPath%>/css/common.css" rel="stylesheet" />
<link href="<%=contextPath%>/css/popUpTable.css" rel="stylesheet" />
</head>
<body>
<div style="height: 100%; overflow-x: hidden;">
<div>
<fieldset>
<legend>接口检测数据</legend>
<div>
<br>  <input id="importInterfaceData" type="button"
value="导入"/> <input id=""
type="button" value="校验"/>
<input id="upZip" type="button" value="批量导入"/>
</div>
<br>
</fieldset>
<fieldset>
<legend>动检车数据</legend>
<div>
<br>  <input id="importCarData" type="button" value="导入">
<input id="" type="button" value="检验">
</div>
<br>
</fieldset>
<fieldset>
<legend>DMS数据</legend>
<div>
<br>  <input id="importDMSData" type="button" value="导入">
<input id="" type="button" value="检验">
</div>
<br>
</fieldset>
<fieldset>
<legend>告警</legend>
<div>
<br>  <input id="importAlarmData" type="button" value="导入">
<input id="" type="button" value="检验">
</div>
<br>
</fieldset>
</div>
<form id="importInterfaceDataForm" action="" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<span style="display: none"> <input type="file"
id="importInterfaceFile" name="importFile" webkitdirectory directory
onchange="submitInterfaceDataForm()" />
</span>
</form>
<form id="importZipForm" action="" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<span style="display: none"> <input type="file"
id="importZip" name="upZip" onchange="submitUpZipForm()" />
</span>
</form>
</div>
</body>
<script>
var contextPath = '<%=contextPath%>' + '/';
var railAdminId = '<%=session.getAttribute("railWayId")%>';
$('#importInterfaceData').on('click',function(){
$('#importInterfaceFile').trigger('click');
});

$("#upZip").on("click",function(){
$("#importZip").trigger("click");
});

function submitInterfaceDataForm(){
var formData=new FormData($("#importInterfaceDataForm")[0]);
dialogClose(lookDialog);
$.ajax({
url : contextPath + 'importDataAction/importInterfaceData.cn',
type : 'POST',
success : function(e) {
if (e) {
alert('上传完成');
} else {
alert("上传失败,查看失败原因");
}
},
data :formData,
cache : false,
contentType : false,
processData : false
});

}

function dialogClose(d){
d.close();
d = null;
}

function submitUpZipForm(){
var file=document.getElementById('importZip').value;
if(file.indexOf(".rar")==-1 && file.indexOf(".zip")==-1){
alert("该文件不是压缩文件,请选择压缩文件上传!");
document.getElementById('importZip').value="";
}else{
var formData=new FormData($("#importZipForm")[0]);
dialogClose(lookDialog);
$.ajax({
url : contextPath + 'importDataAction/importInterfaceData3.cn',
type : 'POST',
success : function(e) {
if (e) {
alert('上传完成');
} else {
alert("上传失败,查看失败原因");
}
},
data :formData,
cache : false,
contentType : false,
processData : false
});

}
}

</script>
</html>



java代码:
@RequestMapping(value = "/importInterfaceData3", method = RequestMethod.POST)
public @ResponseBody boolean importInterfaceData3(@RequestParam("upZip") MultipartFile file,
HttpServletRequest request) {
System.out.println("进入该方法");
String charSet=request.getCharacterEncoding();
System.out.println(charSet);
String name=null;
try {
name = new String(file.getOriginalFilename().getBytes("UTF-8"),"UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
System.out.println("文件名:"+name);
//将文件写入的路径
final String path="D:/压缩包";
// final String path="/opt/im_train_no";
try{
boolean b=writeFile(path,name,file);
System.out.println("文件写入是否完成:"+b);
//写入失败,直接结束
if(b==false){
return false;
}
String zipFile=path+"/"+name;
File f=new File(zipFile);
String folder=f.getParent();
//获得解压命令
String cmd = getCMD(name);
//文件解压缩
boolean flag=analysisZip(cmd);
//解压缩完成之后将源文件删除
if(flag){
f.delete();
}else{
System.out.println("解压失败");
return false;
}
f=new File(folder);
//保存所有的机车文件夹目录
List<File> folderList=new ArrayList<File>();
//找到对应的文件夹
getFolder(f,folderList);
//遍历文件夹,找到每个机车的所有文件
for(int i=0; i<folderList.size(); i++){
List<File> list=new ArrayList<File>();
//找到这个文件夹下的所有文件
filterFolder(folderList.get(i),list);
//只要Excel的文件
list=filterFileByType(list);
//只要名字满足的文件
list=fiterFileByName(list);
Map<String, List<List>> map=createExcelMap(list);
priService.importInterfaceData(map);
}

f=new File(path);
deleteFile(f);

return true;
}catch(Exception e){
e.printStackTrace();
}

return false;
}

/**
* 不同类型的压缩文件对应不同的解压命令
*/
private String getCMD(String name) {
String cmd="";
if(name.endsWith(".zip") || name.endsWith(".ZIP")){
cmd="unzip "+name;
}
if(name.endsWith(".rar")){
cmd="rar x "+name;
}
return cmd;
}


/**
* 删除文件及文件夹
*
* @param f
*/
private void deleteFile(File file) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
deleteFile(files[i]);
}
}
file.delete();
}

/**
* 将前台读到的文件写入服务器
* @param path
* @param name
* @param file
* @return
*/
private boolean writeFile(String path, String name, MultipartFile file) {
try{
File file1=new File(path);
if(file1.exists()){
//先删除该目录下的所有文件和目录(防止上次出现异常,没有执行最后的文件删除操作),再创建一个空目录
deleteFile(file1);
file1.mkdir();
}else{
file1.mkdir();
}
File file2=new File(path,name);
int count = 0, bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
bos = new BufferedOutputStream(new FileOutputStream(file2));
bis = new BufferedInputStream(file.getInputStream());
while ((count = bis.read(buffer, 0, bufferSize)) != -1)
{
bos.write(buffer, 0, count);
}
bos.flush();
bos.close();
return true;
}catch(Exception e){
e.printStackTrace();
}
return false;
}

/**
* 每个机车文件夹下的生成Map
* @param list
* @return
*/
private Map<String, List<List>> createExcelMap(List<File> list) {
//将所有的Excel存入Map中
Map<String,List<List>> map=new HashMap<String, List<List>>();
try{
for(int i=0; i<list.size(); i++){
Workbook workbook=WorkbookFactory.create(list.get(i));
String name=list.get(i).getName();
// System.out.println(name);
importData(workbook, name,map);
}
return map;
}catch(Exception e){
e.printStackTrace();
}
return null;
}

/**
* 获得所有的机车文件夹
* @param f
* @param folderList
*/
private void getFolder(File f, List<File> folderList) {
boolean flag=f.isDirectory();
if(flag){
File[] files=f.listFiles();
for(int i=0; i<files.length; i++){
if(files[i].isDirectory() && (files[i].getName().indexOf("机车")!=-1)){
folderList.add(files[i].getAbsoluteFile());
}else{
getFolder(files[i],folderList);
}
}
}
}

/**
* 通过文件名来过滤文件
* @param list
* @return
*/
private List<File> fiterFileByName(List<File> list) {
for(int i=0; i<list.size(); i++){
String name=list.get(i).getName();
if(name.indexOf("Abis测量")== -1 && name.indexOf("Abis切换")== -1
&& name.indexOf("Abis信令")== -1 && name.indexOf("A信令")== -1
&& name.indexOf("PRI呼叫记录")== -1 && name.indexOf("PRI信令")== -1
&& name.indexOf("A切换")==-1){
list.remove(i);
i=i-1;
}
}
return list;
}

/**
* 通过类型过滤文件
* @param list
* @return
*/
private List<File> filterFileByType(List<File> list) {
for(int i=0; i<list.size(); i++){
String name=list.get(i).getName();
if(!name.endsWith(".xls") && !name.endsWith(".xlsx")){
list.remove(i);
i=i-1;
}
}
return list;
}

/**
* 找到对应的文件夹和文件
* @param file
* @param list
*/
private void filterFolder(File file, List<File> list) {
if(file.isDirectory()){
File[] files=file.listFiles();
for(int i=0; i<files.length; i++){
filterFolder(files[i], list);
}
}else{
list.add(file.getAbsoluteFile());
}

}

/**
* 解压 压缩包
* @param cmd
* @return
*/
private boolean analysisZip(String cmd) {
try{
Process process=Runtime.getRuntime().exec(cmd);
process.waitFor();
}catch(Exception e){
return false;
}
return true;
}

/**
* 通过名字过滤掉不要的表格
* @param files
* @return
*/
private List<MultipartFile> filterByName(List<MultipartFile> files) {
for(int i=0; i<files.size(); i++){
String name=files.get(i).getOriginalFilename();
if(name.indexOf("Abis测量")== -1 && name.indexOf("Abis切换")== -1
&& name.indexOf("Abis信令")== -1 && name.indexOf("A信令")== -1
&& name.indexOf("PRI呼叫记录")== -1 && name.indexOf("PRI信令")== -1
&& name.indexOf("A切换")==-1){
files.remove(i);
i=i-1;
}
}
return files;
}

/**
* 过滤掉不是Excel格式的文件
* @param files
* @return
*/
private List<MultipartFile> filterByType(List<MultipartFile> files) {
for(int i=0; i<files.size(); i++){
String name=files.get(i).getOriginalFilename();
if(!name.endsWith(".xls") && !name.endsWith(".xlsx")){
files.remove(i);
i=i-1;
}
}
return files;
}
...全文
820 2 点赞 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
不管用,项目utf-8; oracle utf-8; Linux utf-8;
  • 打赏
  • 举报
回复
问题的解决过程:
考虑流程:1、数据库存储格式,索引的格式编码 2、项目的文件编码  3、浏览器(tomcat部署编码格式)
一、项目中默认编码设置是UTF-8
二、项目开发环境Eclipse的编码方式是UTF-8(确保代码中的中文显示正常)
三、Tomcat配置:
       更改两个文件的配置
       1.server.xml(添加红色部分)
<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使配置生效。
四、mysql配置
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 ;
  • 打赏
  • 举报
回复
相关推荐
发帖
Web 开发
加入

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2017-12-07 02:13
社区公告
暂无公告