flex 端
1、必须用URLVariables的方式传中文参数, 不能拼接URL。
2、用encodeURIComponent编码中文参数,如下所示
public function export(url:String, mc:String):void{
var bm:IBrowserManager = BrowserManager.getInstance();
bm.init();
if (url.charAt(0) == '/'){
url = "/pmm"+url;
}
var fullUrl:String = URLUtil.getFullURL(bm.base,url);
var params:URLVariables = new URLVariables();
params.mc = encodeURIComponent(mc);
params.dir = dir;
var request:URLRequest = new URLRequest(fullUrl);
request.data = params;
navigateToURL(request, "_blank");
}
java 端
3、先用.URLDecoder.decode解码,这样可以得到正确的中文。
4、再用.URLEncoder.encode编码,这样可以可以让下载的文件名为中文。
当然,也可以忽略相互抵消的这两步, 直接用params.mc作为文件下载名称,如下所示。
String fname =java.net.URLDecoder.decode(params.mc, "UTF-8");
println fname
fname = java.net.URLEncoder.encode(fname, "UTF-8")
response.setHeader("Content-disposition", "attachment; filename=${fname}.${extendFile}");
response.contentType = "application/octet-stream"
File f = new File(dir)
response.outputStream.write(f.readBytes());
response.outputStream.close()