這種亂碼緣由很簡單,通常的工具或解碼程序對中文字符解析時採用默認的解碼方式:javascript
<%@ page contentType="text/html; charset=ISO-8859-1"%>html
咱們只需修改其編碼方式便可,以下:java
<%@ page contentType="text/html; charset=UTF-8"%>web
字符集:UTF-8 > GBK > GB2312tomcat
jsp 中form 表單的 ation="XxxServlet",method="Post"時,提交表單後每每發現中文的屬性值在 Servlet 中獲取後變亂碼。服務器
此時須要定位到 doPost() 方法,首先在方法內首行加上以下 code:jsp
request.setCharacterEncoding("UTF-8");工具
意思是設置 request 的編碼爲 "UTF-8",通常與 jsp 頁面一致編碼
而後,再添加 code:url
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
意思是設置 response 的編碼爲 "UTF-8",即 Servlet 回傳 jsp 時的編碼,上面兩段用其一便可,保持一致是關鍵。
jsp 中form 表單的 ation="XxxServlet",method="Get"時,提交表單後每每發現中文的屬性值在 Servlet 中獲取後變亂碼。
此時需定位的 tomcat 的安裝目錄 %TOMCAT%/conf/server.xml 文件
尋找以下代碼片斷:
1. <Connector port="8080" protocol="HTTP/1.1"
2. maxThreads="150"
3. connectionTimeout="20000"
4. redirectPort="8443"
5. URIEncoding="UTF-8"/>
手動加上URIEncoding="UTF-8"
方案一
html頁面:
function testOne() {
var url = "testTwo.action?expr="+你好;
window.location.href = encodeURI(url);
}
後臺java代碼:
String expr = new String(
request.getParameter("expr").getBytes("ISO-8859-1"),"UTF-8");
方案二
html頁面:
function testTwo() {
var url = "testTwo.action?expr="+你好;
window.location.href= encodeURI(encodeURI(url));
}
後臺java代碼:
String expr = java.net.URLDecoder.decode(lrequest.getParameter("expr") , "UTF-8");
若是用的是weblogic服務器的話,用方案二是能夠解決的(個人weblogic的版本是weblogic 9.2的),方案一解決不了。
若是是tomcat服務器的話,這兩個方案均可以;也能夠在傳遞參數不處理,後臺用
String expr = new String(request.getParameter("expr").getBytes("ISO-8859-1"),"UTF-8");
也是能夠的。
第一種: 設置
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
這裏將文件名編碼成UTF-8的格式,就不會出現URL出錯了。IE6下注意中文文字不能超過超過17個。
第二種:設置
response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );
將中文名編碼爲ISO8859-1的方式。不過該編碼只支持簡體中文.
按照上訴方式,能夠綜合一下兩種方式解決絕大部分中文問題。
fileName = URLEncoder.encode(fileNameSrc,"UTF-8");
if(fileName.length()>150)//解決IE 6.0 bug {
fileName=new String(fileNameSrc.getBytes("GBK"),"ISO-8859-1");
response.setHeader( "Content-Disposition", "attachment;filename=" + fileName);
}