struts 下载乱码问题

down.jsp

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

<%@taglibprefix="s"uri="/struts-tags"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">

<title>Inserttitlehere</title>

<scripttype="text/javascript">

functionmergeCells(){

varFILEname="我是谁";

varkeys=escape(escape(FILENAME));window.open("downloadUncheckStudentExcel.action?filename="+keys);

}

</script>

</head>

<body>

<ahref="#"onclick="mergeCells()">setValue</a>

</body>

</html>

down.action

/**

*serialVersionUID。

*/

privatestaticfinallongserialVersionUID=-3573542869197851164L;

/**

*//文件路径.

*/

privateStringinputPath;

/**

*文件名.

*/

privateStringfileName;

privateLoglogger=LogFactory.getLog(this.getClass());

///**

//*压缩文档目录

//*/

//privateStringoutURL;

///**

//*@returntheoutURL

//*/

//publicfinalStringgetOutURL()

//{

//returnoutURL;

//}

//

///**

//*@paramoutURLtheoutURLtoset

//*/

//publicfinalvoidsetOutURL(StringoutURL)

//{

//this.outURL=outURL;

//}

privateInputStreamdownLoadFile;

/**

*@paramargDownLoadFile

*thedownLoadFiletoset

*/

publicfinalvoidsetDownLoadFile(

finalInputStreamargDownLoadFile)

{

this.downLoadFile=argDownLoadFile;

}

/**

*获得下载文件.

*

*@return下载文件流

*/

publicfinalInputStreamgetDownLoadFile()

{

returndownLoadFile;

}

///**

//*获得接口,即接口类.

//*/

//privatestaticGetServicesgetService=newGetServices();

/**

*文件编号.

*/

//privateLongfileId;

///**

//*日志.

//*/

//privatestaticfinalLoggerLOGGER=Logger

//.getLogger(DownloaAction.class.getName());

//

publicfinalStringgetInputPath()

{

returninputPath;

}

/**

*@paramargInputPath

*文件路径

*/

publicfinalvoidsetInputPath(finalStringargInputPath)

{

this.inputPath=argInputPath;

}

/**

*

*@paramargFileName

*文件名

*/

//publicfinalvoidsetFileName(finalStringargFileName)

//{

////StringfilName=ServletActionContext.getRequest().getParameter("Name");

//this.fileName=argFileName;

//}

//

publicfinalStringgetFileName()

throwsUnsupportedEncodingException

{

StringdownFileName;

downFileName=newString(fileName.getBytes(),

"ISO-8859-1");

logger.info(downFileName);

returndownFileName;

}

publicfinalStringencode(finalStringfilename)

throwsUnsupportedEncodingException

{

returnnewString(filename.getBytes("ISO-8859-1"),

"GBK");

}

///**

//*

//*@return文件ID

//*/

//publicfinalLonggetFileId()

//{

//returnfileId;

//}

/**

*@returnthefileName

*/

//publicfinalStringgetFileName(){

//returnfileName;

//}

/**

*@paramfileNamethefileNametoset

*/

publicfinalvoidsetFileName(StringfileName){

this.fileName=fileName;

}

/**

*

*@paramargFileId

*fileID

*/

//publicfinalvoidsetFileId(finalLongargFileId)

//{

//this.fileId=argFileId;

//}

publicstaticclassEscape{

privatefinalString[]hex={

"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",

"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",

"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",

"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",

"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",

"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",

"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",

"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",

"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",

"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",

"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",

"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",

"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",

"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",

"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",

"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"

};

privatefinalstaticbyte[]val={

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F

};

publicStringescape(Strings){

StringBuffersbuf=newStringBuffer();

intlen=s.length();

for(inti=0;i<len;i++){

intch=s.charAt(i);

if(ch==''){//space:mapto'+'

sbuf.append('+');

}elseif('A'<=ch&&ch<='Z'){//'A'..'Z':asitwas

sbuf.append((char)ch);

}elseif('a'<=ch&&ch<='z'){//'a'..'z':asitwas

sbuf.append((char)ch);

}elseif('0'<=ch&&ch<='9'){//'0'..'9':asitwas

sbuf.append((char)ch);

}elseif(ch=='-'||ch=='_'//unreserved:asitwas

||ch=='.'||ch=='!'

||ch=='~'||ch=='*'

||ch=='\''||ch=='('

||ch==')'){

sbuf.append((char)ch);

}elseif(ch<=0x007F){//otherASCII:mapto%XX

sbuf.append('%');

sbuf.append(hex[ch]);

}else{//unicode:mapto%uXXXX

sbuf.append('%');

sbuf.append('u');

sbuf.append(hex[(ch>>>]);

sbuf.append(hex[(0x00FF&ch)]);

}}

returnsbuf.toString();

}

publicstaticStringunescape(Strings){

StringBuffersbuf=newStringBuffer();

inti=0;

intlen=s.length();

while(i<len){

intch=s.charAt(i);

if(ch=='+'){//+:mapto''

sbuf.append('');

}elseif('A'<=ch&&ch<='Z'){//'A'..'Z':asitwas

sbuf.append((char)ch);

}elseif('a'<=ch&&ch<='z'){//'a'..'z':asitwas

sbuf.append((char)ch);

}elseif('0'<=ch&&ch<='9'){//'0'..'9':asitwas

sbuf.append((char)ch);

}elseif(ch=='-'||ch=='_'//unreserved:asitwas

||ch=='.'||ch=='!'

||ch=='~'||ch=='*'

||ch=='\''||ch=='('

||ch==')'){

sbuf.append((char)ch);

}elseif(ch=='%'){

intcint=0;

if('u'!=s.charAt(i+1)){//%XX:maptoascii(XX)

cint=(cint<<4)|val[s.charAt(i+1)];

cint=(cint<<4)|val[s.charAt(i+2)];

i+=2;

}else{//%uXXXX:maptounicode(XXXX)

cint=(cint<<4)|val[s.charAt(i+2)];

cint=(cint<<4)|val[s.charAt(i+3)];

cint=(cint<<4)|val[s.charAt(i+4)];

cint=(cint<<4)|val[s.charAt(i+5)];

i+=5;

}

sbuf.append((char)cint);

}

i++;

}

returnsbuf.toString();

}

publicvoidmain(String[]args){

Stringstest="中文1234abcd[]()<+>,.~\\";

System.out.println(stest);

System.out.println(escape(stest));

System.out.println(unescape(escape(stest)));

}

}[/color][color=blue][/color][color=darkblue][/color][align=left][/align][color=red]

publicfinalStringdownloadUncheckStudentExcel()

{

SimpleDateFormatformator=newSimpleDateFormat(

"yyyy-MM-ddhh:mm");

Datedate=newDate();

//if(fileName==null||fileName.trim().isEmpty()){

logger.info("fileNameisinkk********"+fileName);

fileName=Escape.unescape(fileName);

logger.info("fileNameis********"+fileName);

if(fileName==null||fileName.trim().isEmpty()){

filename="excle表"+formator.format(date)+".xls";

}else

{

fileName+=".xls";

}

//filename="FGSAF"+formator.format(date)+".xls";

logger.info("fileNameis********"+fileName);

try

{

downLoadFile=newGetExcel().getMyStudentExcel();

returnSUCCESS;

}catch(Exceptione)

{

logger.info("shibai");

//LogUtil

//.log(

//"DownlooActiondownloadUncheckStudentExcelerror!",

//Level.SEVERE,e);

//this.errorMsg="下载未确认的学生名单时系统出错!";

returnERROR;

}

}

struts配置

<packagename="struts-admin"extends="struts-default">

<actionname="downloadUncheckStudentExcel"class="org.asource.action.DownloadCourseAction"

method="downloadUncheckStudentExcel">

<resultname="success"type="stream">

<paramname="inputName">downLoadFile</param>

<paramname="contentType">application/x-msdownload,charset=ISO8859-1</param>

<paramname="contentDisposition">attachment;filename="${fileName}"</param>

<paramname="bufferSize">4096</param>

</result>

<resultname="resultnull">error.jsp</result>

</action>

</package>

相关推荐