get方式中文亂碼問題

<a target="_blank" href="ftpFileAction!downloadFile.action?filename=測試.xml">點擊下載</a>html

 

若是當前頁面編碼是utf-8.java

這裏是main.jsp瀏覽器

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>tomcat

以及head頭jsp

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

而且main.jsp自己的文件編碼是utf-8.測試

若是是post方式,Servlet後臺設置request.setCharacterEncoding('utf-8')後必定獲得正確中文。ui

但對於get方式,get方式提交參數若包含中文,編碼

在我本機測試,ie下提交的使用iso-8859-1轉碼gbk可獲得正常中文。firefox

filename=new String(filename.getBytes("ISO-8859-1"),"gbk");

在firefox下提交的參數在Servlet中使用iso-8859-1轉碼utf-8可獲得正常中文。

filename=new String(filename.getBytes("ISO-8859-1"),"utf-8");

 

必定要轉碼的緣由是對於get方式提交的參數,tomcat默認不會使用request.setCharacterEncoding的編碼方式轉碼,而是使用ISO-8859-1。

要保證各瀏覽器兼容性,

能夠在get方式提交參數時,把參數進行轉碼。

encodeURI(適合編碼整個URI)和encodeURIComponent(適合編碼URI的一部分參數)

js腳本:

filename=encodeURIComponent('測試.xml');

'<a target="_blank" href="ftpFileAction!downloadFile.action?filename='+filename+'">點擊下載</a>'

註明:

encodeURI, encodeURIComponent 是 UTF-8 的
escape 是  Unicode 的

escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-ZencodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-ZencodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

相關文章
相關標籤/搜索