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

web中文亂碼如何描述

發布時間: 2023-06-30 00:08:23

『壹』 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即可。

『貳』 web程序網頁出現亂碼的原因分析什麼是字元編碼

字元編碼 就是字元的二進制編碼方式 , 同一個字元 用不同的編碼方式時 二進制的數據不同的,用一種編碼方式時展現另一種編碼方式的文字時 會出現對應的另一個字元, 這就是亂碼了,

要是網頁不出現亂碼 至少要做到 編碼統一
1 伺服器端網頁文件 要統一使用一種編碼;

2 文件頭要聲明這個網頁是使用何種編碼的, 而且與存儲的文件編碼相同;

header("Content-Type: text/html; charset=utf-8");
3 瀏覽器一般能識別,這個聲明若不能識別 說明 第二步的聲明有錯誤或者瀏覽器不能理解;

4 最重要一點 如果使用的資料庫 , 資料庫的編碼也要一致;

5, 容易忽略的 一點 , 如果 windows 系統使用了中文文件名是用的是GBK 碼 如果你的網頁文件不使用GBK 引用文件名 目錄名時 一定要轉碼;

『叄』 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解碼後的位元組流發向瀏覽器

『肆』 javaweb怎麼處理中文亂碼問題

中文亂碼問題真的是一個很棘手的問題,特別是從前台傳到後台之後,都不知道問題出在哪裡了。現在分享解決javaWEB中前後台中文亂碼問題的3種方法。
方法一:
tomcat的自帶編碼是ISO-8859-1的格式,是不兼容中文的編碼的。所以我們從後台接收的時候要注意。
採用相同的格式去接收(ISO-8859-1),然後用能解析的編碼(utf-8)去轉換。這樣我們就能得到能兼容中文的格式了。這樣處理之後發往前台。注意:發往前台的時候也需要設置一下
resp.setContentType("text/html;charset=utf-8");//設置頁面的字元編碼,解決界面顯示中文亂碼的問題
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//因為tomcat自帶編碼是ISO-8859-1格式

//解決亂碼方法之一
<span style="white-space:pre"> </span>String name=req.getParameter("username");
<span style="white-space:pre"> </span>String pwd=req.getParameter("pwd");
<span style="white-space:pre"> </span>byte[] b=name.getBytes("ISO-8859-1");//用tomcat的格式(iso-8859-1)方式去讀。
<span style="white-space:pre"> </span>String str=new String(b,"utf-8");//採用utf-8去接string
<span style="white-space:pre"> </span>resp.setContentType("text/html;charset=utf-8");//設置頁面的字元編碼<span style="white-space:pre"> </span>

<span style="white-space:pre"> </span>PrintWriter pw =resp.getWriter();
<span style="white-space:pre"> </span>String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
<span style="white-space:pre"> </span>pw.print(str1);
PrintWriter pw =resp.getWriter();
String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
pw.print(str1);

方法二:
由於方法一比較繁瑣,採用用了簡單的設置。只需要簡單的一句就可以搞定
req.setCharacterEncoding("utf-8");//必須寫在第一位,因為採用這種方式去讀取數據,否則數據會出錯。
這樣就不用像之前的那樣繁瑣的設置了

protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//因為tomcat自帶編碼是ISO-8859-1格式

//解決亂碼二《法一比較繁瑣》
req.setCharacterEncoding("utf-8");//必須寫在第一位,因為採用這種方式去讀取數據,否

則數據會出錯。
//設置這樣方式去讀。這樣中文就能夠讀取出來了,但是需要注意。表單的發送方式必須是<span style="color:#ff0000;"> method='post'</span>
resp.setContentType("text/html;charset=utf-8");//設置傳過去的頁面顯示的編碼
String name=req.getParameter("username");
String pwd=req.getParameter("pwd");
PrintWriter pw =resp.getWriter();
String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
pw.print(str1);

方法三:
這是在法二的基礎上修改的。雖然我們能修改編碼格式去讀,但是考慮到用戶肯定不會修改,所以我們需要採用比較通用的辦法,讓用戶修改配置文件。也就是web.xml文件
需要修改web.xml裡面的內容,就是說,字元編碼從xml接收過來。需要在xml文件中配置參數。
代碼如下:

<servlet>
<servlet-name>Encodeing</servlet-name>
<servlet-class>cn.hncu.com.encode.Encodeing</servlet-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>//這裡面的內容可供用戶自己填寫(必須是編碼格式)
</init-param>
</servlet>

我們知道前台和後台進行交換必須經過web.xml配置
我們需要獲取web.xml的設置的參數

public void init(ServletConfig config) throws ServletException {
charset=config.getInitParameter("charset");//獲得初始化參數。當然charset需要設置為全局變數。後面的service函數需要設置req.setCharacterEncoding(charset);
}

req.setCharacterEncoding(charset);
resp.setContentType("text/html;charset=utf-8");
String name=req.getParameter("username");
String pwd=req.getParameter("pwd");

PrintWriter pw =resp.getWriter();
String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
pw.print(str1);