導航:首頁 > 編程語言 > jsp中傳參亂碼

jsp中傳參亂碼

發布時間:2024-06-16 07:43:19

jsP <a href="">中傳遞中文的問題

你好啊 ,你學jsp是吧!
你可能還不知道jsp在在傳遞中文時候會出現亂碼

所以說你的圖片路徑在傳遞後的路徑系統識別不出來了

所以你要麼改成英文的,要麼解決中文亂碼的問題

怎麼解決呢?

這有篇文章,你看看,我試過,可以成功

關於JSP中文亂碼

JSP文件中亂碼現象經常遇到,那如何處理就是我們不可避免的話題,那麼該如何解決呢,下面我針對不同的情況,給出幾種處理方式:

1) JSP頁面中文亂碼,這種情況比較好處理,在頁面的page指令中加上如下一項就行
<%@ page contentType=」text/html;charset=UTF-8」 %>

2) JSP頁面採用表單提交時,提交的數據中包含中文,並且提交方式為post這時我們獲取表單數據後,展示到其它頁面時會出現亂碼,解決方案是在獲取請求中的參數前,先設置請求的字元集。
如下代碼: request.setCharacterEncoding(「UTF-8」) ;

3) 還是表單提交數據,但是提交方式為默認的get方式,這時即使我們設置了請求字元集,但取出來還是亂碼,這時需要如下的轉換方式,我把轉換方式用一個編碼轉換類來實現了。
/*
* 定義一個轉換字元集的工具類CharSetTool
*
* 定義一個方法,用來轉換
*/
public class CharSetTool
{
/*
* 方法toUTF8()
* 參數: @inStr 傳入要轉換的字元串
*/
public static String toUTF8(String inStr)
{
String rtStr="";
if(inStr!=null)
{
try
{
rtStr=new String(inStr.getBytes("ISO-8859-1"),"UTF-8");
}
catch (UnsupportedEncodingException e)
{
//列印錯誤信息
System.out.println(e.getMessage());
}
}
return rtStr;
}
}

4) URL中文參數亂碼處理,
比如:超鏈接方式
<%
String str="我是中國人";
%>
<a href="next?str=<%=str%>">我是鏈接,單擊可以提交參數</a>
註:next 為 Servlet的URL Pattern
那在將中文作為參數值傳遞時,首先要把中文字元串進行編碼轉換,轉換成URL格式
操作如下:
<%
String str="我是中國人";
//使用URLEncoder.encode方法
str = URLEncoder.encode(str,"UTF-8");
%>
<a href="next?str=<%=str%>">我是鏈接,單擊可以提交參數</a>

綜合以上幾種比較常見的JSP中文亂碼的處理方式,不管是何種提交方式,我們都可以使用JSP中的過濾器(Filter)來過濾字元編碼,下面我就給出一個我自己定義的 「通用」的字集編碼過濾器。
/**
* 處理中文字元集的過濾器
*
* @author Administrator
*
*/
public class EncodingFilter implements Filter
{
//過濾器銷毀的方法
public void destroy()
{
}

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chan)
throws IOException, ServletException
{

//設置響應模式
response.setContentType("text/html;charset=UTF-8");

//判斷客戶端的提交方式
if(((HttpServletRequest)request).getMethod().equalsIgnoreCase("POST"))
{
//POST方式提交
//設置請求字元集
request.setCharacterEncoding("UTF-8");

}
else
{
//處理GET
//獲取所有的提交參數
Enumeration names = request.getParameterNames();

//遍歷
while(names.hasMoreElements())
{
//參數名
String name = (String)names.nextElement();

//因為不知道參數是多值還是單值
String values[] = request.getParameterValues(name);

//循環處理字元集轉換
for(int i=0;i<values.length;i++)
{
values[i] = toUTF8(values[i]);
}
}
}
//調用過濾器鏈中的下一個過濾器
chan.doFilter(request, response);
}

//轉換方法(內部私有方法)
private String toUTF8(String str)
{
String rt = null;

try {
if(str!=null)
{
//轉換新字元集
rt = new String(str.getBytes("ISO-8859-1"),"UTF-8");

}
} catch (UnsupportedEncodingException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
}

return rt;
}

//初始化方法
public void init(FilterConfig config) throws ServletException
{
}
}

然後在web.xml文件中進行相關的配置 :

<!-- 配置過濾器 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>ocean.mvc.filter.EncodingFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 匹配所有的請求 -->
</filter-mapping>

㈡ jsp高手請進,我用jspsmartupload上傳文件,但我表單獲得的中文是亂碼(UTF-8)的,

頁面最頂部聲明頁面的編碼格式:
請問你伺服器是windows還是,
如果是linux:<%@ page contentType="text/html;charset=utf-8" language="java" %>試試
如果是windows:<%@ page contentType="text/html;charset=GBK" language="java" %>試試

SmartUpload su = new SmartUpload();
su.initialize(pageContext);
su.upload();//必須放在獲得表單參數之前
su.getRequest().getParameter("addsubmit")//獲得request參數
com.jspsmart.upload.File files = su.getFiles().getFile(0);
String fileName = new String(files.getFileName());//獲得名稱

我這邊服務在windows平台時只用修改頁面編碼格式為GBK就一切OK,但是在linux下需要吧頁面編碼格式改為UTF-8

另外,form表單中的file文件名可能從request得不到,需要通過SmartUpload 類獲得文件名,類似上面處理,因為: ENCTYPE="multipart/form-data"

㈢ 如何解決 jsp 中url傳值的中文亂碼問題

第一步:在tomcat 的server.xml文件中設置web伺服器埠配製中加下面兩句:
useBodyEncodingForURI="true"
URIEncoding="UTF-8"

第二步:JSP頁面編專碼用UTF-8(也可以用「gb2312",第一步與屬解碼要一至)傳值時編碼一下:
以傳遞的參數為strPar為例, 在傳遞數據前將strPar進行編碼java.net.URLEncoder.encode(strPar,"UTF-8");

第二步:解碼 在獲取數據伺服器端Action中得到的strPar進行解碼java.net.URLDecoder.decode(strPar,"UTF-8");
本人測試時傳入action中可以不解碼也正常。

舉例:

Url傳值:
<a href="myPage.jsp?strPar=<%=java.net.URLEncoder.encode("中文參數值","UTF-8")%>">點擊這里</a>

//下面是解碼
String cnStr=java.net.URLDecoder.decode(strPar,"GB2312");

㈣ jsp中處理中文亂碼的解決方案有哪些

JSP 中文亂碼處理解決方案

初學JSP,尤其是環境(GlassFish默認UTF-8,則不存在此類問題),經常會因為中文漢字字元集設置問題導致中文亂碼,本文就這一問題提出解決方案,解決中文亂碼問題,供各位參考,我採用的方案是統一字元集至UTF-8,同時避免GB2312所帶來的中文字元集不夠用的隱患,需注意的地方有三點,默認情況下是英文字元集。
1、Tomcat 的 server.xml 文件,設置伺服器埠工作方式
2、Servlet 和 JavaBean 對字元串字元集處理的統一
3、JSP頁面的字元集統一
完成這三點統一,中文想亂碼都難,如果使用MySQL的話,數據表也需要做UTF-8統一。

修改Tomcat的server.xml文件,該文件位於 tomcat/conf,紅色部分為添加部分,也就是當前使用的HTTP埠的連接方式的設置。
找到Connector 標簽,使 Tomcat 伺服器以UTF-8模式進行工作,從底層對亂碼進行處理,修改如下:
<Connector URIEncoding="utf-8" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
其它應用伺服器例如GlassFish默認支持utf-8,伺服器本身無需設置,只須代碼上注意即可。

運行代碼內設置如下:
JavaBean 和 Servlet 內需要處理中文的地方之前,或者所有函數最前端加上
request.setCharacterEncoding ("UTF-8");
response.setCharacterEncoding ("UTF-8");
避免在 JavaBean 和 Servlet 內出現漢字亂碼。

JSP代碼中的 JAVA 字元編碼設置,在頁面上對亂碼進行處理。

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

紅色為制定JSP處理字元採用UTF-8編碼處理方式。

<%request.setCharacterEncoding ("UTF-8");%>
JSP內JAVA代碼設定接收參數為UTF-8編碼

JSP 內 HTML 頭的編碼設置,頁面處理以UTF-8,避免顯示亂碼。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Note Page</title>
</head>
<body>
……
……
紅色部分UTF-8制定HTML頁面使用的編碼方式

<form action=index.jsp method="post"><h3>Please Input Your Name:</h3>
<input type="text" size="30" name="中文名字" value="" >
<input type=submit value="提交">
</form>

接收代碼如下:

<%
// 通過二進制傳遞的參數,因為UTF-8的設置,無須轉換,直接中文操作,而不會出現亂碼。
String temp1 = request.getParameter ("yourname");
……
%>

採用get方式略有不同,若只採用以上設定,遇中文參數,因編碼不同,會導致部分文字信息丟失,所以在提交前務必進行編碼,這里用到兩個函數java.net.URLDecoder.decode 和java.net.URLDecoder.encode,分別是編碼和解碼。

<a href="
<%=request.getContextPath()%>/index.jsp?傳遞的參數名=
<%=java.net.URLEncoder.encode (傳遞的漢字變數,"UTF-8")%>">
<%=超鏈接熱點顯示內容%>
</a>

作為參數傳遞的中文,由 java.net.URLEncoder.encode函數將要發送的變數解析為16進制數字編碼,進行URL傳遞,接收代碼如下:

<%String str = request.getParameter ("傳遞的參數名");%>

由此,獲得參數後的 str 內將是正確的中文信息,完全避免了亂碼的顯示。

可用 java.net.URLDecoder.decode 函數
例如
<%
String str1 = java.net.URLDecoder.decode(request.getParameter("傳遞的參數名"),"UTF-8");
%>
完畢將完美解決中文字元參數亂碼問題。

㈤ jsp中的亂碼怎麼解決

剛開始學習jsp的程序員都會遇到這樣一個問題,就是網頁上的中文無法顯示.總結了以下幾條方法。
1、在jsp頁中加入一條語句:
<%@ page contentType="text/html;charset=gb2312" %>中文顯示就正常了。

2、對於從網頁中的文本框通過String parameter = request.getParameter(「parameter」);方式獲得的字元串,均是8859_1的編碼,
如果想把它顯示在網頁上就必須得用parameter = new String(parameter.getBytes(「8859_1」),」gb2312」)進行轉換,windows和linux這兩種系統都是一樣的。
有一個簡單方法,就是在 getParameter() 方法獲取參數之前,使用request.setCharacterEncoding("GB2312");,將提交的信息轉化為 GB2312 編碼。

3、但是對於將數據寫入資料庫的問題,採取的方式就不同了:
windows下,必須要採用該字元串轉換再插入資料庫,而linux下就不需要,而是直接把8859_1編碼的字元插入。
如果從資料庫中讀出的數據,對於windows因為在插入時已經做了轉換,所以讀出時已經是gb2312的,當把它顯示在網頁上時,不需要做編碼轉換,而 linux上的mysql中的數據是8859_1的所以要做編碼的轉換。

4、 如果你給某個字元串變數賦予一個中文字元串的值,那麼在你取出他時,在網頁上的顯示是不需要做字元轉換的,
但是如果你要在linux下做字元的比較,則還需要把字元做parameter = new String(parameter.getBytes(「gb2312」),」8859_1」)的轉換。

5、長江電力網站解決中文問題的方法是:
1)在catalina.sh文件中的相關位置添加下面一行
-Dfile.encoding=GBK \
2)在每個jsp文件的最前面添加下面兩行
<%@ page contentType="text/html; charset=GBK" %>
<%request.setCharacterEncoding("GBK");%>

㈥ jsp 頁面間 傳參 中文 亂碼 問題

你的jsp頁面是什麼編碼在用new String(request.getParameter("groupTitle").getBytes("ISO-8859-1"),"你頁面的編碼");在使用這句之前要設置request對象的編碼格式,即request.setCharacterEncoding("頁面的編碼格式");

閱讀全文

與jsp中傳參亂碼相關的資料

熱點內容
中級資料庫系統工程師應用技術考什麼 瀏覽:404
博途編程如何設置停止鍵 瀏覽:409
python3刪除文件內容 瀏覽:754
如何優化seo數據分析 瀏覽:132
64位win7下部分32位程序不能運行 瀏覽:206
dnf90版本劍魂鈍器流 瀏覽:649
陌秀直播蘋果怎麼下載ipad 瀏覽:732
簡述網路直接市場調查方式有哪些 瀏覽:683
怎麼連接移動網路設置 瀏覽:781
電腦網卡怎麼連接網路連接不上網嗎 瀏覽:838
刷子公司網站怎麼做 瀏覽:272
86版本艾爾文測試 瀏覽:714
深宮曲文件夾是哪個 瀏覽:618
蘋果u盤修復工具哪個好用 瀏覽:124
微信動態表情包搞笑 瀏覽:436
可以去哪裡找編程老師問問題 瀏覽:608
win10lol全屏 瀏覽:25
qq圖片動態動漫少女 瀏覽:122
sai繪圖教程視頻 瀏覽:519
如何分析載入減速法數據 瀏覽:672

友情鏈接