當前位置:首頁 » 網頁前端 » javaweb解決亂碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

javaweb解決亂碼

發布時間: 2022-04-25 00:25:11

A. javaweb怎麼處理中文亂碼

1.UTF-8國際編碼,GBK中文編碼。GBK包含GB2312,即如果通過GB2312編碼後可以通過GBK解碼,反之可能不成立;

2、web tomcat:默認是ISO8859-1,不支持中文的

3.java.nio.charset.Charset.defaultCharset()獲得平台默認字元編碼;

4.getBytes() 是通過平台默認字元集進行編碼;

二、引入

在學習任何一門技術時,經常會有初學者遇到中文亂碼問題,比如MySQL,是因為在安裝時沒有設置;而在Servlet中,也會遇到中文亂碼問題;

比如:

OutputStream out = response.getOutputStream();

out.write(String );

輸出中文時可能會出現亂碼;

比如:

[java]view plain

  • protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

  • OutputStreamout=response.getOutputStream();

  • Stringdata="博客";

  • out.write(data.getBytes("UTF-8"));

  • 輸出亂碼的問題是程序用UTF-8編碼,而瀏覽器默認用GBK解碼了,因此會出現亂碼;

    三、Servlet相關的幾種亂碼

    1、瀏覽器調用jsp,html等頁面中文顯示亂碼

    此情況需滿足兩個要求:

    (1)文件本身是以utf-8編輯保存的(myEclipse中在properties中滑鼠右鍵選擇utf-8)

    (2)瀏覽器用utf-8解析:

    (手動)==> 在瀏覽器中右鍵選擇編碼格式為utf-8

    (智能)==> 在文件中寫入如:<meta name="content-type" content="text/html; charset=UTF-8"> 通過<meta>標簽模擬response頭,起到告訴瀏覽器用utf-8的編碼解析

    (智能)==>response.setContentType("text/html;charset=UTF-8");起到告訴瀏覽器用utf-8的編碼解析

    常用:

    <meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">

    <%@ pageEncoding="utf-8"%>

    <?xml encoding="UTF-8"?>

    2、通過瀏覽器調用servlet,頁面顯示亂碼。

    Servlet亂碼分為request亂碼和response亂碼;

    (1)response亂碼問題

    解決方法:

    在網上很有效的解決方法是添加:

    response.setCharacterEncoding("UTF-8");

    解決不了,後來又搜到一條解決方法是:

    response.setContentType("text/html;charset=utf-8");或者response.setHeader("content-type","text/html;charset=UTF-8");告訴瀏覽器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在攔截器Filter中設置字元編碼,則無此方法,因為Filter的doFilter方法的參數類型是ServletResponse)

    兩句都填上,後來終於解決了這個問題;

    其實我們應該思考一下本質:

    response.setContentType("text/html;charset=UTF-8");目的是為了控制瀏覽器的行為,即控制瀏覽器用UTF-8進行解碼;

    response.setCharacterEncoding("UTF-8");目的是用於response.getWriter()輸出的字元流的亂碼問題。如果是response.getOutputStream()是不需要此種解決方案的,因為這句話的意思是為了將response對象中的數據以UTF-8解碼後的位元組流發向瀏覽器

B. Java Web 亂碼 求解決方案

以下提到的地方,你都做一下檢查,這是平時總結的,但願對你有幫助

最基本的亂碼問題
這個亂碼問題是最簡單的亂碼問題。一般新會出現。就是頁面編碼不一致導致的亂碼。
Html代碼:
<%@ page language="java" pageEncoding="UTF-8"%>? <%@ page contentType="text/html;charset=iso8859-1"%>? <html>? <head>? <title>中文問題</title>? <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">? </head>? </head>? <body>? JSP中文編碼問題解決方法詳解? </body>? </html>?

三個地方的編碼
第一個地方的編碼格式為jsp文件的存儲格式。Ecljpse會根據這個編碼格式保存文件。並編譯jsp文件,包括裡面的漢字。
第二處編碼為解碼格式。因為存為UTF-8的文件被解碼為iso8859-1,這樣如有中文肯定出亂碼。也就是必須一致。而第二處所在的這一行,可以沒有。預設也是使用iso8859-1的編碼格式。所以如果沒有這一行的話,「我是個好人」也會出現亂碼。必須一致才可以。
第三處編碼為控制瀏覽器的解碼方式。如果前面的解碼都一致並且無誤的話,這個編碼格式沒有關系。有的網頁出現亂碼,就是因為瀏覽器不能確定使用哪種編碼格式。因為頁面有時候會嵌入頁面,導致瀏覽器混淆了編碼格式。出現了亂碼。
表單使用Post方式提交後接收到的亂碼問題
這個問題也是一個常見的問題。這個亂碼也是tomcat的內部編碼格式iso8859-1在搗亂,也就是說post提交時,如果沒有設置提交的編碼格式,則會以iso8859-1方式進行提交,接受的jsp卻以utf-8的方式接受。導致亂碼。既然這樣的原因,下面有幾種解決方式,並比較。
a. 接受參數時進行編碼轉換

String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;

這樣的話,每一個參數都必須這樣進行轉碼。很麻煩。但確實可以拿到漢字。
b. 在請求頁面上開始處,執行請求的編碼代碼

request.setCharacterEncoding("UTF-8")

把提交內容的字元集設為UTF-8。這樣的話,接受此參數的頁面就不必在轉碼了。直接使用

String str = request.getParameter("something");
即可得到漢字參數。但每頁都需要執行這句話。這個方法也就對post提交的有效果,對於get提交和上傳文件時的enctype="multipart/form-data"是無效的。稍後下面單獨對這個兩個的亂碼情況再進行說明。
c. 為了避免每頁都要寫request.setCharacterEncoding("UTF-8"),建議使用過濾器對所有jsp進行編碼處理。這個網上有很多例子。請大家自己查閱。
表單get提交方式的亂碼處理方式
如果使用get方式提交中文,接受參數的頁面也會出現亂碼,這個亂碼的原因也是tomcat的內部編碼格式iso8859-1導致。Tomcat會以get的預設編碼方式iso8859-1對漢字進行編碼,編碼後追加到url,導致接受頁面得到的參數為亂碼/、。
解決辦法:
a. 使用上例中的第一種方式,對接受到的字元進行解碼,再轉碼。
b. Get走的是url提交,而在進入url之前已經進行了iso8859-1的編碼處理。要想影響這個編碼則需要在server.xml的Connector節點增加useBodyEncodingForURI="true"屬性配置,即可控制tomcat對get方式的漢字編碼方式,上面這個屬性控制get提交也是用request.setCharacterEncoding("UTF-8")所設置的編碼格式進行編碼。所以自動編碼為utf-8,接受頁面正常接受就可以了。但我認為真正的編碼過程是,tomcat又要根據

<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"disableUploadTimeout="true" URIEncoding=」UTF-8」/>

裡面所設置的URIEncoding=」UTF-8」再進行一次編碼,但是由於已經編碼為utf-8,再編碼也不會有變化了。如果是從url獲取編碼,接受頁面則是根據URIEncoding=」UTF-8」來進行解碼的。
上傳文件時的亂碼解決
上傳文件時,form表單設置的都是enctype="multipart/form-data"。這種方式以流方式提交文件。如果使用apach的上傳組件,會發現有很多亂碼想像。這是因為apach的先期commons-fileupload.jar有bug,取出漢字後進行解碼,因為這種方式提交,編碼又自動使用的是tomcat預設編碼格式iso-8859-1。但出現的亂碼問題是:句號,逗號,等特殊符號變成了亂碼,漢字如果數量為奇數,則會出現亂碼,偶數則解析正常。
解決方式:
下載commons-fileupload-1.1.1.jar 這個版本的jar已經解決了這些bug。但是取出內容時仍然需要對取出的字元進行從iso8859-1到utf-8轉碼。已經能得到正常所有漢字以及字元。
Java代碼關於url請求,接受參數的亂碼
url的編碼格式,取決於上面所說的URIEncoding=」UTF-8」。如果設定了這個編碼格式,則意味著所有到url的漢字參數,都必須進行編碼才可以。否則得到的漢字參數值都是亂碼,例如一個鏈接:

Response.sendDerect(「/a.jsp?name=玫瑰妮子」);
而在a.jsp裡面直接使用 String name = request.getParameter("name");

得到的就是亂碼。因為規定了必須是utf-8才可以,所以,這個轉向應該這樣寫:

Response.sendDerect(「/a.jsp?name=URLEncode.encode(「玫瑰妮子」,」utf-8」);才可以。
如果不設置這個參數URIEncoding=」UTF-8」,會怎麼樣呢? 不設置則就使用了預設的編碼格式iso8859-1。問題又出來了,第一就是參數值的個數如果是奇數個數,則就可以正常解析,如果使偶數個數,得到最後字元就是亂碼。還有就是如果最後一個字元如果是英文,則就能正常解析,但中文的標點符號仍出現亂碼。權宜之計,如果您的參數中沒有中文標點符號,則可以在參數值最後加一個英文符號來解決亂碼問題,得到參數後再去掉這個最後面的符號。也可以湊或使用。
腳本代碼關於url請求,接受到的參數亂碼
腳本中也會進行頁面轉向的控制,也會涉及到附帶參數,並在接受頁面解析這個參數的情況。如果這個漢字參數不進行URIEncoding=」UTF-8」所指定的編碼處理,則接受頁面接受到的漢字也是亂碼。腳本處理編碼比較麻煩,必須有相應的編碼腳本對應文件,然後調用腳本中的方法對漢字進行編碼即可。
關於jsp在MyEclipse中打開的亂碼問題
對於一個已經存在的項目,Jsp文件的存儲格式可能是utf-8。如果新安裝的eclipse,則預設打開使用的編碼格式都是iso8859-1。所以導致jsp裡面的漢字出現亂碼。這個亂碼比較容易解決,直接到eclipse3.1的偏好設置裡面找到general-〉edidor,設置為您的文件打開編碼為utf-8即可。Eclipse會自動重新以新的編碼格式打開。漢字即可正常顯示。
關於html頁面在eclipse中打開出現亂碼情況
由於大部分頁面都是由dreamweaver製作,其存儲格式跟eclipse的識別有差別導致。一般這種情況,在eclipse中新建一個jsp,直接從dreamweaver復制頁面內容粘貼到jsp即可。

C. 如何解決JavaWeb亂碼問題

request-line中的URL部分必須以application/x-www-form-urlencoded方式編碼。編碼時使用的字元集是當前網頁在瀏覽器上顯示時所使用的字元集。

JDK中專門有兩個類處理application/x-www-form-urlencoded類型的數據,它們是URLEncoder及URLDecoder。當網頁上的數據需要手動進行URLEncoding處理時,可使用URLEncoder類完成編碼工作。需要手動進行URLEncoding處理的位置包括:

  • 鏈接(<a></a>)中的href標簽屬性;

  • 以POST方式提交的表單(<form></form>)中的action標簽屬性。

  • 例如,網頁上不應該產生這樣的鏈接:

    [xhtml]view plain

  • <!--不正確的寫法-->

  • <ahref="/hello/checkUser.html?opt=中文>使用者身份驗證"</a>

  • 正確的寫法是:

    [xhtml]view plain

  • <!--使用UTF-8字元集進行URLEncoding的結果-->

  • <ahref="/hello/checkUser.html?opt=%E4%B8%AD%E6%96%87">使用者身份驗證</a>

  • 為此,方案之一可以在JSP網頁上使用腳本化語言進行URLEncoding處理。如:

    [xhtml]view plain

  • <%@pageimport="java.net.URLEncoder"%>

  • <ahref="/hello/checkUser.html?opt=<%=URLEncoder.encode("中文","UTF-8")%>">使用者身份驗證</a>

  • request-body的編碼處理

    request-body只有在POST提交的方式下才會產生。request-body的編碼方式由表單的enctype標簽屬性指定,同request-line一樣,編碼request-body時使用的字元集也是當前網頁在瀏覽器上顯示時所使用的字元集。request-body的編碼過程由客戶端瀏覽器自動完成,不需要額外的編程處理。

    伺服器的處理

    相對於用戶端,伺服器端在接收到HTTP請求時提供了兩種處理請求數據的方式:自動處理與不處理。
    伺服器一般會自動處理application/x-www-form-urlencoded類型的數據(包括request-line及request-body中的數據),就servlet(Servlet類或JSP網頁)而言,可以通過request對象的getParameter()或getParameterValues()取得這些數據。對於除此以外的其它MIME類型的數據,HTTP伺服器則是將處理的過程直接交到了與HTTP請求相對應的servlet(Servlet類或JSP網頁)身上。
    例如用戶端有以下表單被提交:

    [xhtml]view plain

  • <formaction="checkUser.html?opt=xxx"method="POST">

  • <inputtype="text"name="username"value="yyy"/>

  • <inputtype="text"name="username"value="zzz"/>

  • <inupttype="submit"value="submit"/>

  • </form>

  • 表單提交時經伺服器端自動處理後與checkUser.html相對應的servlet(Servlet類或JSP網頁)可以通過下面的方式取得數據:

    [java]view plain

  • Stringopt=request.getParameter("opt");

  • String[]users=request.getParameterValues("username");

  • 默認情況下,伺服器對於接收到的application/x-www-form-urlencoded類型數據進行字元集為ISO-8859-1的URLDecoding處理,經過處理之後的字元串內碼為ISO-8859-1。對於沒有附加任何設置的HTTP伺服器而言,我們的servlet在取得數據之後必須進行相應的解碼處理,生成內碼為UTF-16(unicode)的字元串。
    例如對於用戶端請求數據中以UTF-8字元集進行URLEncoding的數據,servlet需要進行如下方式的解碼:

    [java]view plain

  • Stringopt=request.getParameter("opt");

  • if(opt!=null&&!"".equals(opt)){

  • opt=newString(opt.getBytes("ISO-8859-1"),"UTF-8");

  • }

  • 為了避免這種額外的編碼/解碼處理,也就是說讓伺服器了解到用戶端在URLEncoding時所使用的字元集,從而直接進行相應字元集的URLDecoding處理,不同的HTTP伺服器提供了不同的解決方案。
    以Tomcat為例,Tomcat自動解碼request-line的處理方式由Tomcat的配置文件server.xml指定。在server.xml中的Connector標簽中提供了URIEncoding標簽屬性,只要為其指定解碼用的字元集,Tomcat就會自動解碼request-line中經過application/x-www-form-urlencoded編碼處理的數據。例如:

    <Connector connectionTimeout="40000" port="8080" protocol="HTTP/1.1"
    URIEncoding="UTF-8" redirectPort="8443"/>

    Tomcat自動解碼request-body的處理方式是設置request的characterEncoding值。如:

    request.setCharacterEncoding("UTF-8");

    但是這一操作必須提前在filter中完成,在servlet中使用此方法已經不起作用了。filter的例子如下:

    [java]view plain

  • importjava.io.IOException;

  • importjavax.servlet.Filter;

  • importjavax.servlet.FilterChain;

  • importjavax.servlet.FilterConfig;

  • importjavax.servlet.ServletException;

  • importjavax.servlet.ServletRequest;

  • importjavax.servlet.ServletResponse;

  • {

  • privateStringencoding;

  • publicCharacterEncodingFilter(){

  • encoding=null;

  • }

  • publicvoiddestroy(){

  • encoding=null;

  • }

  • publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,

  • FilterChainchain)throwsIOException,ServletException{

  • request.setCharacterEncoding(encoding);

  • chain.doFilter(request,response);

  • }

  • publicvoidinit(FilterConfigfilterConfig)throwsServletException{

  • encoding=filterConfig.getInitParameter("encoding");

  • if(encoding==null||"".equals(encoding)){

  • encoding="UTF-8";

  • }

  • }

  • }

  • 我們可以在web.xml使用這個filter。web.xml的相應配置如下:

    [xhtml]view plain

  • <filter>

  • <filter-name>CharacterEncodingFilter</filter-name>

  • <filter-class>

  • CharacterEncodingFilter

  • </filter-class>

  • <init-param>

  • <param-name>encoding</param-name>

  • <param-value>UTF-8</param-value>

  • </init-param>

  • </filter>

  • <filter-mapping>

  • <filter-name>CharacterEncodingFilter</filter-name>

  • <url-pattern>/*</url-pattern>

  • </filter-mapping>

  • 通過上述兩種方式的預處理,在servlet中取出的數據可以不必進行ISO-8859-1解碼而直接使用。

    字元集的選擇

    在處理application/x-www-form-urlencoded類型的數據過程中,需要注意的另一個問題是字元集的選擇問題。如上所述,不論是request-line還是request-body,其URLEncoding所使用的字元集都是當前網頁在瀏覽器上顯示時所使用的字元集。而這個信息又是HTTP伺服器端生成HTML網頁時,在HTTP響應中提供的。
    當HTTP伺服器接收到一個HTTP請求時,伺服器總是需要向用戶端發送一個HTTP響應。HTTP響應數據與HTTP請求數據格式相同,同樣由以下幾個部分組成:

    <response-line>
    <headers>
    <CRLF>
    [<response-body><CRLF>]

    下面描述的是請求一個HTML網頁數據時伺服器的響應信息:

    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Type: text/html;charset=UTF-8
    Content-Length: 265
    Date: Thu, 17 Dec 2009 05:20:36 GMT

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>test</title>
    </head>
    <body>
    <h1>Hello World</h1>
    </body>
    </html>
    [End]

    其中headers的Content-Type指定了數據流的數據格式以及顯示用的字元集。這一指標可以通過以下幾種方式指定:
    1. HTML網頁
    在HTML網頁的<head></head>中存在多個<meta/>標簽,其中可以設置Content-Type。例如:

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

    2. JSP網頁
    JSP網頁中,除了<meta/>標簽之外,還需要在JSP網頁頭部設置如下代碼:

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

    3. Servlet類
    如果要在Servlet類中通過response向用戶端傳送HTML數據,需要在傳送前指定Content-Type。代碼如下:

    response.setContentType("text/html;charset=UTF-8");

    通過上述三種方式,可以確保響應數據傳送到用戶端瀏覽器時,瀏覽器使用正確解碼方式和字元集顯示其內容。

    結束語

    總之,Content-Type是聯系用戶端與伺服器端的紐帶,通過這一指標,雙方得以對相關的數據進行正確的編碼與解碼。只要了解了Content-Type的作用以及使用方法,亂碼問題就會迎刃而解。

D. Javaweb返回給Android客戶端json中文字元亂碼

JavaWeb的各種中文亂碼終極解決方法:一、Servlet輸出亂碼1. 用servlet.getOutStream位元組流輸出中文,假設要輸出的是String str ="測試中文"。1.1 若是本地伺服器與本地客戶端這種就不用說了,直接可以out.write(str.getBytes())可以輸出沒有問題。因為伺服器中用str.getBytes()是採用默認本地的編碼,比如GBK。而瀏覽器也解析時也用本地默認編碼,兩者是統一的,所以沒有問題。1.1 若伺服器輸出時用了, out.write(str.getBytes("utf-8"))。而本地默認編碼是GBK時(比例在中國),那麼用瀏覽器打開時就會亂碼。因為伺服器發送過來的是utf-8的1010數據,而客戶端瀏覽器用了gbk來解碼,兩者編碼不統一,肯定是亂碼。當然,你也可以自己將客戶端瀏覽器的編碼手工調用下(IE菜單是:查詢View->編碼encoding->utf-8),但是這種操作很爛,最好由伺服器輸出響應頭告訴,瀏覽器用哪種編碼來解碼。所以要在伺服器的servlet中,增加response.setHeader("content-type","text/html;charset=utf-8"),當然也可直接用簡單的response.setContentType("text/hmtl;charset=utf-8")。兩種的操作是一樣一樣的。2. 用servlet.getWirter字元流輸出中文,假設要輸出的是String str ="測試中文亂碼"。2.1 若寫成out.print(str)輸出時,客戶端瀏覽器顯示的將全是多個?????的字元,代表在編碼表中肯定就找不到相應的字元來顯示。原因是:servlet.getWriter()得到的字元輸出流,默認對字元的輸出是採用ISO-8859-1,而ISO-8859-1肯定是不支持中文的。所以肯定要首先要做的第一件事:是要將伺服器對象輸出字元能支持中文的。其次伺服器向客戶端寫回的響應頭要告訴客戶端是用了哪種編碼表進行編碼的。而實現這兩個需求,只需要response.setContentType("text/hmtl;charset=utf-8")。就搞定了。特別注意:response.setContentType("text/html;charset=utf-8")要放在PrintOut out = response.getWriter()代碼的前面,否則只是有告訴客戶端用什麼碼表編碼的功能,而伺服器端還是用ISO-8859-1編碼了。再特別提示下:在同一Servlet中的doGet或doPost方法中,不能既用response.getOutputStream又用response.getWriter,因為這兩種response的響應輸出位元組流與字元流是沖突的,只能用其一。二、Servlet文件下載,中文亂碼情況。關鍵是下載時響應頭 content-disposition中attachment;filename=文件名。這個文件名filename不能是含有中文字元串的,要用URLEncoding編碼進行編碼,才能進行進行http的傳輸。三、Servlet的response增加addCookie,cookie中value的中文碼問題解決方法。若想將cookie中存放中文的值,必須用Base64編碼後,發給客戶瀏覽器端進入存儲。而下次客戶端瀏覽訪問是帶回來的cookie中的值,是經過Base64編碼的,所以需要用Base64解碼即可。 Base64編碼主要是解決將特殊字元進行重新編碼,編碼成a-b、A-B、0-9、+與/,字元52,10個數字與一個+,一個/ 共64個字元。它的原理是將原來3個位元組的內容編碼成4個位元組。主要是取位元組的6位後,在前面補00組成一個新的位元組。所以這樣原來的3個位元組共24,被編碼成4個位元組32位了。四、獲取請求參數亂碼GET方式的亂碼:如CN,直接用request.getParameter得到的字元串strCN將會亂碼,這也是因為GET方式是用http的url傳過來的默認用iso-8859-1編碼的,所以首先得到的strCn要再用iso-8859-1編碼得到原文後,再進行用utf-8(看具體頁面的charset是什麼utf-8或gbk)進行解碼即可。new String(strCn.getBytes(「ISO-8859-1」),「UTF-8」);Javaweb返回給Android客戶端json中文字元亂碼

E. 在java中怎樣處理中文亂碼的問題(有幾種處理方式)

讀取文件的時候如果是用的read方法(位元組流),碰到中文輸出就是亂碼,然後存儲的時候設置下編碼為GBK或者是UTF-8形式即可,可以有效的解決亂碼問題。
可以通過BufferedReader 流的形式進行流緩存,之後通過readLine方法獲取到緩存的內容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時獲取到的bre就是整個文件的緩存流
while ((str = bre.readLine())!= null) // 判斷最後一行不存在,為空結束循環
{
System.out.println(str);//原樣輸出讀到的內容
};
備註: 流用完之後必須close掉,如上面的就應該是:bre.close(),否則bre流會一直存在,直到程序運行結束。
可以通過「FileOutputStream」創建文件實例,之後過「OutputStreamWriter」流的形式進行存儲,舉例:
OutputStreamWriter pw = null;//定義一個流
pw = new OutputStreamWriter(new FileOutputStream(「D:/test.txt」),"GBK");//確認流的輸出文件和編碼格式,此過程創建了「test.txt」實例
pw.write("我是要寫入到記事本文件的內容");//將要寫入文件的內容,可以多次write
pw.close();//關閉流
備註:文件流用完之後必須及時通過close方法關閉,否則會一直處於打開狀態,直至程序停止,增加系統負擔。

F. 關於javaweb項目的亂碼問題

把你的亂碼過濾器的filter配置在安全審核filter的前面 filter的執行順序會按照web.xml里配置的順序進行 如果先進行安全審核的filter, 安全審核的filter從request里獲得了數據 那麼之後在亂碼過濾的filter里在設置正確的編碼仍然是亂碼

G. java web工程裡面中文亂碼了

如果是用的tomact做容器,打開server.xml,看一下是否編碼設置正確。如下URIEncoding的值:

<Connectorport="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"URIEncoding="UTF-8"/>

H. 如何解決Java WEB應用中的亂碼問題

一方面代碼裡面的設置,比如在jsp里,
另一方面就是eclipse的設置,idea不熟悉,
一般就那幾個地方,一,在eclipse里右鍵項目名字-resource,會有text file encoding的設置

二,菜單欄里Windows- preferences- 可以在搜索條里搜encod, 會出來兩個,content type 和workspace 這兩個地方也是設置字元集的
或者直接找General -- workspace 同上設置 ,General- Content Type 這裡面是各種文件的編碼格式,看下亂碼的文件格式,如是注釋文件,xml,或者java,dtd等

I. java WEB項目的jsp頁面顯示的時候亂碼。在別人電腦上都顯示的是正常的,在我這里就是亂碼

1、右鍵項目,properties,選擇編碼

J. java web亂碼怎麼解決

最基本的亂碼問題
這個亂碼問題是最簡單的亂碼問題。一般新會出現。就是頁面編碼不一致導致的亂碼。
Html代碼:
<%@ page language="java" pageEncoding="UTF-8"%>? <%@ page contentType="text/html;charset=iso8859-1"%>? <html>? <head>? <title>中文問題</title>? <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">? </head>? </head>? <body>? JSP中文編碼問題解決方法詳解? </body>? </html>?

三個地方的編碼
第一個地方的編碼格式為jsp文件的存儲格式。Ecljpse會根據這個編碼格式保存文件。並編譯jsp文件,包括裡面的漢字。
第二處編碼為解碼格式。因為存為UTF-8的文件被解碼為iso8859-1,這樣如有中文肯定出亂碼。也就是必須一致。而第二處所在的這一行,可以沒有。預設也是使用iso8859-1的編碼格式。所以如果沒有這一行的話,「我是個好人」也會出現亂碼。必須一致才可以。
第三處編碼為控制瀏覽器的解碼方式。如果前面的解碼都一致並且無誤的話,這個編碼格式沒有關系。有的網頁出現亂碼,就是因為瀏覽器不能確定使用哪種編碼格式。因為頁面有時候會嵌入頁面,導致瀏覽器混淆了編碼格式。出現了亂碼。
表單使用Post方式提交後接收到的亂碼問題
這個問題也是一個常見的問題。這個亂碼也是tomcat的內部編碼格式iso8859-1在搗亂,也就是說post提交時,如果沒有設置提交的編碼格式,則會以iso8859-1方式進行提交,接受的jsp卻以utf-8的方式接受。導致亂碼。既然這樣的原因,下面有幾種解決方式,並比較。
a. 接受參數時進行編碼轉換

String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;

這樣的話,每一個參數都必須這樣進行轉碼。很麻煩。但確實可以拿到漢字。
b. 在請求頁面上開始處,執行請求的編碼代碼

request.setCharacterEncoding("UTF-8")

把提交內容的字元集設為UTF-8。這樣的話,接受此參數的頁面就不必在轉碼了。直接使用

String str = request.getParameter("something");
即可得到漢字參數。但每頁都需要執行這句話。這個方法也就對post提交的有效果,對於get提交和上傳文件時的enctype="multipart/form-data"是無效的。稍後下面單獨對這個兩個的亂碼情況再進行說明。
c. 為了避免每頁都要寫request.setCharacterEncoding("UTF-8"),建議使用過濾器對所有jsp進行編碼處理。這個網上有很多例子。請大家自己查閱。
表單get提交方式的亂碼處理方式
如果使用get方式提交中文,接受參數的頁面也會出現亂碼,這個亂碼的原因也是tomcat的內部編碼格式iso8859-1導致。Tomcat會以get的預設編碼方式iso8859-1對漢字進行編碼,編碼後追加到url,導致接受頁面得到的參數為亂碼/、。
解決辦法:
a. 使用上例中的第一種方式,對接受到的字元進行解碼,再轉碼。
b. Get走的是url提交,而在進入url之前已經進行了iso8859-1的編碼處理。要想影響這個編碼則需要在server.xml的Connector節點增加useBodyEncodingForURI="true"屬性配置,即可控制tomcat對get方式的漢字編碼方式,上面這個屬性控制get提交也是用request.setCharacterEncoding("UTF-8")所設置的編碼格式進行編碼。所以自動編碼為utf-8,接受頁面正常接受就可以了。但我認為真正的編碼過程是,tomcat又要根據

<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"disableUploadTimeout="true" URIEncoding=」UTF-8」/>

裡面所設置的URIEncoding=」UTF-8」再進行一次編碼,但是由於已經編碼為utf-8,再編碼也不會有變化了。如果是從url獲取編碼,接受頁面則是根據URIEncoding=」UTF-8」來進行解碼的。
上傳文件時的亂碼解決
上傳文件時,form表單設置的都是enctype="multipart/form-data"。這種方式以流方式提交文件。如果使用apach的上傳組件,會發現有很多亂碼想像。這是因為apach的先期commons-fileupload.jar有bug,取出漢字後進行解碼,因為這種方式提交,編碼又自動使用的是tomcat預設編碼格式iso-8859-1。但出現的亂碼問題是:句號,逗號,等特殊符號變成了亂碼,漢字如果數量為奇數,則會出現亂碼,偶數則解析正常。
解決方式:
下載commons-fileupload-1.1.1.jar 這個版本的jar已經解決了這些bug。但是取出內容時仍然需要對取出的字元進行從iso8859-1到utf-8轉碼。已經能得到正常所有漢字以及字元。
Java代碼關於url請求,接受參數的亂碼
url的編碼格式,取決於上面所說的URIEncoding=」UTF-8」。如果設定了這個編碼格式,則意味著所有到url的漢字參數,都必須進行編碼才可以。否則得到的漢字參數值都是亂碼,例如一個鏈接:

Response.sendDerect(「/a.jsp?name=玫瑰妮子」);
而在a.jsp裡面直接使用 String name = request.getParameter("name");

得到的就是亂碼。因為規定了必須是utf-8才可以,所以,這個轉向應該這樣寫:

Response.sendDerect(「/a.jsp?name=URLEncode.encode(「玫瑰妮子」,」utf-8」);才可以。
如果不設置這個參數URIEncoding=」UTF-8」,會怎麼樣呢? 不設置則就使用了預設的編碼格式iso8859-1。問題又出來了,第一就是參數值的個數如果是奇數個數,則就可以正常解析,如果使偶數個數,得到最後字元就是亂碼。還有就是如果最後一個字元如果是英文,則就能正常解析,但中文的標點符號仍出現亂碼。權宜之計,如果您的參數中沒有中文標點符號,則可以在參數值最後加一個英文符號來解決亂碼問題,得到參數後再去掉這個最後面的符號。也可以湊或使用。
腳本代碼關於url請求,接受到的參數亂碼
腳本中也會進行頁面轉向的控制,也會涉及到附帶參數,並在接受頁面解析這個參數的情況。如果這個漢字參數不進行URIEncoding=」UTF-8」所指定的編碼處理,則接受頁面接受到的漢字也是亂碼。腳本處理編碼比較麻煩,必須有相應的編碼腳本對應文件,然後調用腳本中的方法對漢字進行編碼即可。
關於jsp在MyEclipse中打開的亂碼問題
對於一個已經存在的項目,Jsp文件的存儲格式可能是utf-8。如果新安裝的eclipse,則預設打開使用的編碼格式都是iso8859-1。所以導致jsp裡面的漢字出現亂碼。這個亂碼比較容易解決,直接到eclipse3.1的偏好設置裡面找到general-〉edidor,設置為您的文件打開編碼為utf-8即可。Eclipse會自動重新以新的編碼格式打開。漢字即可正常顯示。
關於html頁面在eclipse中打開出現亂碼情況
由於大部分頁面都是由dreamweaver製作,其存儲格式跟eclipse的識別有差別導致。一般這種情況,在eclipse中新建一個jsp,直接從dreamweaver復制頁面內容粘貼到jsp即可。