本文目錄一覽:
- 1、jsp頁面獲取中文亂碼怎麼解決方法
- 2、jsp網頁下載文件出現中文亂碼,我的下載超鏈接指向文件,如果文件名是英文,就下載正常,如果文件名是
- 3、怎麼解決jsp中文亂碼問題,我要瘋了
- 4、jsp頁面下載鏈接出現亂碼
- 5、jsp用a標籤下載文件,中文出現亂碼怎麼解決?
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網頁下載文件出現中文亂碼,我的下載超鏈接指向文件,如果文件名是英文,就下載正常,如果文件名是
超鏈接的地址使用js自帶的解碼函數解碼
若1還不行就在tomcat的server.xml文件里加上這個
怎麼解決jsp中文亂碼問題,我要瘋了
1、JSP頁面出現的中英文亂碼:
我們的PageCharset.jsp頁面代碼如下所示:
[html] view plain copy
%@ page language=”java” import=”java.util.*”%
html
head
title中文顯示示例/title
/head
body
中文顯示的示例。
%
out.print(“這裡是用jsp輸出的中文”);
%
/body
/html
當我們在保存我們的文件的時候會出現下面的提示:
整因為在我們的MyEclipse中默認的編碼為ISO-8859-1,而ISO-8859-1不支持中文的編碼,所以jsp頁面代碼如果出現中文就不能保存了。對於這樣的錯誤,我們只要在頁面上加上支持中文的編碼格式就可以了,在jsp頁面中加上pageEncoding=「gb2132」 支持中頁面的編碼格式就可以了。這樣我們就能正常保存我們的jsp源文件了。
2、URL傳遞參數中文亂碼
[html] view plain copy
%@ page language=”java” import=”java.util.*” pageEncoding=”gb2312″%
html
head
titleURL傳遞參數中英文處理示例/title
/head
%
String param = request.getParameter(“param”);
%
body
a href=”URLCharset.jsp?param=’中文'”請單擊這個鏈接/a
您提交的這個參數為:%=param %
/body
/html
啟動tomcat運行結果出現url傳遞的中文亂碼:
這裡我們需要配置tomcat伺服器文件,才能解決這個問題。具體方法是,在tomcat的conf目錄下找到server.xml配置文件,找到如下代碼
[html] view plain copy
span style=”font-size:18px” Connector port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ //span
在後面添加上編碼方式,URIEncoding=”gb2312″ 重新啟動tomcat問題就解決了。
3、表單提交中問亂碼
對於表單中提交的數據,可以用request.getPraramter(“”);方法來獲取,但是當表單中出現中文數據的時候就會出現亂碼。
我們的提交表單的頁面,FormCharset.jsp頁面如下:
[html] view plain copy
%@ page language=”java” contentType=”text/html; charset=GB18030″
pageEncoding=”GB18030″%
!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “”
html
head
meta http-equiv=”Content-Type” content=”text/html; charset=GB18030″
titleForm中文處理示例/title
/head
body
下面是表單內容:
form action=”AcceptFormCharset.jsp” method=”post”
用戶名:input type=”text” name=”userName” size=”10″ /
密 碼:input type=”password” name=”password” size=”10″/
input type=”submit” value=”提交”/
/form
/body
/html
我們的AcceptFormCharset.jsp頁面:
[html] view plain copy
%@ page language=”java” contentType=”text/html; charset=GB18030″
pageEncoding=”GB18030″%
!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “”
html
head
meta http-equiv=”Content-Type” content=”text/html; charset=GB18030″
titleForm中文處理示例/title
/head
body
下面是表單提交以後request取到的表單的數據:br
%
out.println(“表單輸入的userName值為:” + request.getParameter(“userName”) +”br”);
out.println(“表單輸入的pasword值為:” +request.getParameter(“password”) + “br”);
%
/body
/html
提交表單:
結果如下:
我們看到我們在表單中的中文數據出現了亂碼,為什麼楚翔這種情況呢?是因為我們的tomcat中,對於以post方式提交的表單編碼格式默認為ISO-8859-1的編碼格式,而這種編碼格式是不能編碼中文的,所以就會出現亂碼的現象了。對於這種情況,我們可以對錶單中的數據進行處理,在取得表單參數的時候設置編碼方式,我們更改了我們的接受表單數據的頁面如下所示:
[html] view plain copy
%
String userName = request.getParameter(“userName”);
String passWord = request.getParameter(“password”);
out.println(“表單輸入的userName值為:” + new String(userName.getBytes(“ISO-8859-1″),”gb2312″)+”br”);
out.println(“表單輸入的pasword值為:” + new String(passWord.getBytes(“ISO-8859-1″),”gb2312″)+”br”);
%
這樣就得到我們想要的效果啦:
4、資料庫操作中文亂碼
我們在建立資料庫的時候,最好是能選擇支持中文編碼格式,最好是能和jsp頁面編碼格式保持一致,這樣就儘可能的減少資料庫操作中文亂碼的問題,最開始的連接資料庫的時候,編寫好資料庫的編碼策略,也就是使用這種形式的URL:jdbc:Oracle:thin:@localhost:1521:TEST;userEnicode=true;characterEncoding=gb2312; 這樣我們選擇的資料庫的編碼和我們的jsp編碼就一致了。
寫入到資料庫的時候,資料庫中中文亂碼:
但是如果我們在最開始的時候沒有對資料庫的編碼進行設置,並且我們的資料庫中已經有大量的數據的話,我們再向資料庫中寫入中文數據,資料庫中的中文顯示為亂碼。在寫入數據的時候出現亂碼,是因為我們在處理表單的時候沒有對字元的編碼設置,對於這種情況,我們在jsp中或servlet中加入:
rquest.setCharacterEncoding(“gb2312”);//處理表單請求的時候設置編碼。
這樣再看我們的資料庫,插入的中文欄位就不會亂碼了。
從資料庫中讀出中文亂碼:
資料庫中的中文出現亂碼,就是在讀取資料庫的時候進行轉碼,這樣顯示就不會亂碼了。我們整理這樣的一個轉碼函數:
public String encoder(String str) throws UnsupportedEncodingException
{
String result = new String(str.getBytes(“ISO-ISO-8859-1)”),”gb2312″);
}
5 在myeclipse開發工具中打開中文顯示亂碼
在myeclipse中默認的編碼方式為ISO-8859-1,所以打開有其他編譯器編碼的jsp頁面就會出現亂碼,是因為兩個編譯器保存源文件編碼格式不同,在UltralEdit可以支持中文,但是在Eclipse對jsp文件的保存方式為ISO-8895-1,這種編碼不支持中文,所以就會出現亂碼。
對於這種情況,我們可以更改myeclipse默認的編碼方案,myeclipse-Window-Preferences-General-Content types-Test-JSP
這樣問題就解決啦!
6 Filter批量設置編碼格式
我們對於每一個jsp或servlet我們都要設置編碼格式,效率有些低,我們的servlet的Filter解決了我們的問題。在前篇寫過Filter的解決中文亂碼問題的文章,在這裡就不贅述了。
需要強調的一點,開始使用Java model1模型的時候,我們在web.xml中配置只需要配置好jsp頁面就可以了,在model2模型中我們使用servlet作為控制器,我們就需要在Filter的配置文件web.xml中配置好servlet的設置,對所有的servlet處理的表單編碼進行設置。
[html] view plain copy
filter
filter-nameCharsetEncodingFilter/filter-name
filter-classcom.bjpowernode.drp.util.filter.CharsetEncodingFilter/filter-class
init-param
param-nameencoding/param-name
param-valueGBK/param-value
/init-param
/filter
filter-mapping
filter-nameCharsetEncodingFilter/filter-name
url-pattern*.jsp/url-pattern
/filter-mapping
filter-mapping
filter-nameCharsetEncodingFilter/filter-name
url-pattern/servlet/*/url-pattern
/filter-mapping
jsp頁面下載鏈接出現亂碼
jsp中實現文件下載的最簡單的方式是在網頁上做超級鏈接,如:a
href=”music/abc.mp3″點擊下載/a。但是這樣伺服器上的目錄資源會直接暴露給最終用戶,會給網站帶來一些不安全的因素。因此可以採用其它方式實現下載,可以採用:1、RequestDispatcher的方式進行;2、採用文件流輸出的方式下載。
1、採用RequestDispatcher的方式進行
jsp頁面中添加如下代碼:
%
response.setContentType(“application/x-download”);//設置為下載application/x-download
String
filedownload
=
“/要下載的文件名”;//即將下載的文件的相對路徑
String
filedisplay
=
“最終要顯示給用戶的保存文件名”;//下載文件時顯示的文件保存名稱
filenamedisplay
=
URLEncoder.encode(filedisplay,”UTF-8″);
response.addHeader(“Content-Disposition”,”attachment;filename=”
+
filedisplay);
try
{
RequestDispatcher
dis
=
application.getRequestDispatcher(filedownload);
if(dis!=
null)
{
dis.forward(request,response);
}
response.flushBuffer();
}
catch(Exception
e)
{
e.printStackTrace();
}
finally
{
}
%
2、採用文件流輸出的方式下載
%@page
language=”java”
contentType=”application/x-msdownload”
pageEncoding=”gb2312″%%
//關於文件下載時採用文件流輸出的方式處理:
//加上response.reset(),並且所有的%後面不要換行,包括最後一個;
response.reset();//可以加也可以不加
response.setContentType(“application/x-download”);
String
filedownload
=
“想辦法找到要提供下載的文件的物理路徑+文件名”;
String
filedisplay
=
“給用戶提供的下載文件名”;
filedisplay
=
URLEncoder.encode(filedisplay,”UTF-8″);
response.addHeader(“Content-Disposition”,”attachment;filename=”
+
filedisplay);
OutputStream
outp
=
null;
FileInputStream
in
=
null;
try
{
outp
=
response.getOutputStream();
in
=
new
FileInputStream(filenamedownload);
byte[]
b
=
new
byte[1024];
int
i
=
0;
while((i
=
in.read(b))
0)
{
outp.write(b,
0,
i);
}
outp.flush();
}
catch(Exception
e)
{
System.out.println(“Error!”);
e.printStackTrace();
}
finally
{
if(in
!=
null)
{
in.close();
in
=
null;
}
if(outp
!=
null)
{
outp.close();
outp
=
null;
}
}
%
至於你出現的問題,可能是瀏覽器打開了你要下載的文件,而不是保存,你點右鍵另存為看看能不能下載
jsp用a標籤下載文件,中文出現亂碼怎麼解決?
我猜你說的中文出現亂碼應該是文件名內的中文出現亂碼。
這和伺服器,本機的編碼有關係吧。
應該在下載的過程中將伺服器文件名編碼轉換一次。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/156646.html