當前位置:首頁 » 編程語言 » java處理亂碼

java處理亂碼

發布時間: 2022-06-19 13:40:00

1. 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);

2. java出現亂碼怎麼解決

你的類名和文件名都不一樣怎麼編譯
把wjsw.java改成HelloWorld.java

3. 如何解決Java中的中文亂碼問題

如果你的項目編碼是utf-8的話,右鍵項目properties-->Resource-->others 下拉框改為utf-8。望採納:)

4. java程序執行中文亂碼如何解決

看你編譯沒問題,運行時報亂碼錯誤。說明是代碼的編碼跟DOS系統的編碼不一致。
DOS系統是ASCII碼,你看一下你代碼的編碼是什麼,應該不是ASCII碼,你把你的代碼編碼轉換成ASCII碼試試先,不行再轉成UTF-8試試,這樣應該就解決了(如果是編碼不一致的問題的話)

5. java代碼中文亂碼怎麼解決方法

解決亂碼問題:可以修改eclipse里的編碼格式來解決亂碼問題:

1、window--> Preference

6. 打開java文件都是亂碼怎麼解決

文件編碼不一致,修改文件編碼utf-8。
如果是class文件亂碼,找反編譯軟體打開。

7. eclipse java代碼中文亂碼怎麼解決

您好,將別人的項目或JAVA文件導入到自己的Eclipse中時,常常會出現JAVA文件的中文注釋變成亂碼的情況,主要原因就是別人的IDE編碼格式和自己的Eclipse編碼格式不同。
總結網上的建議和自己的體會,可以參考以下幾種解決方式:
1
改變整個文件類型的編碼格式
1)
eclipse->window->preferences->General->Content
Types
2)
找到要修改的文件的類型(JAVA,JSP等等),在下面有個Default
encoding,在輸入框中輸入GBK
3)
點擊Update
4)
點擊OK
5)
重啟eclipse
2
改變整個Eclipse工作空間的編碼格式
1)
eclipse->window->preferences->General->workspaceTypes
2)
改變文本文件編碼格式為GBK
3
改變單個文件的編碼格式
,在包資源管理器右鍵點擊文件->屬性,改變文本文件編碼格式為GBK
4
如果以上幾種方式仍不能解決,可以下面這個不得已的辦法:
用Editplus打開要轉碼的文件,如果在Editplus中沒有亂碼,可直接將文件內容拷貝到Eclipse中,如果Editplus也有亂碼,可先
在Editplus轉碼,Editplus->文檔->文件編碼方式->改變文件編碼方式->GBK,然後再用Eclipse打
開就可以了。
5,打開Eclipse,有時候會出現中文注釋亂碼,這是因為Eclipse中對Text
file
encoding的默認編碼是GBK,因此,右鍵點擊你的「工程」,將Info中的「Text
file
encoding」中的Other改為UTF-8,即可!

8. java爬蟲一段話里的部分字元亂碼解決

1. 網路爬蟲亂碼的原因。
源網頁的編碼與抓取後的編碼轉換不一致。如果源網頁是gbk編碼的位元組流,程序在我們抓取後直接用utf-8編碼輸出到存儲文件,這必然會造成亂碼,即當源網頁編碼與程序抓取後直接處理編碼一致時,就不會出現亂碼,然後統一字元編碼後也就不會出現亂碼。注意區分源網路代碼A,程序B直接使用的代碼,統一轉換字元的代碼C。
2. 是網頁的伺服器端代碼。
B.捕獲的數據原本是位元組數組,由A編碼,只有B=A才能保證不會出現亂碼;否則,當字元集不兼容時,就會出現亂碼字元。這一步常用於測試。
c、統一轉碼是指在獲得網頁的原始編碼A後進行統一編碼,主要是將每個網頁的數據統一成一種編碼,往往首選字元集較大的utf-8。
每個網頁都有自己的代碼,比如gbk,utf-8,iso8859-1,日本jp系統代碼,西歐,俄語等等。爬行時,所有類型的代碼都將被擴展。有的爬蟲只是簡單的識別網頁,然後統一編碼,有的則直接按照utf-8統一處理,不需要判斷源網頁,顯然會造成亂碼。
3. 亂碼的解決方案。
根據原因找到解決辦法很簡單。
1) 確定源網頁的代碼a。
代碼a通常位於網頁的三個位置,即httpheader的內容、網頁的元字元集和網頁標題中的文檔定義。獲取源網頁代碼時,依次判斷這三部分數據,從頭到尾優先順序相同。
理論上這是對的,但是國內有些網站不符合標准。比如寫出來的gbk其實是utf-8,有的寫出來是utf-8,其實是gbk。當然這是幾個網站,但是確實存在。因此,在確定網頁編碼時,應該對這種特殊情況給予特殊處理,如中文檢查、默認編碼等策略。
在另一種情況下,如果以上三種都沒有編碼信息,一般使用第三方的網頁編碼智能識別工具,如cpdetector。原理是通過統計位元組數組的特性來計算實際編碼,有一定的准確率,但是我發現在實踐中准確率還是很有限的。
但是綜合以上三種編碼確認方法後,中文亂碼的問題幾乎可以完全解決。在我的基於nutch1.6的網路爬蟲系統中,經過統計,編碼准確率可以達到99.99%,這也證明了上述方法和策略的可行性。
2) 程序通過代碼b還原源網頁數據。
顯然,這里的B應該等於a,在java中,如果源網頁的位元組數組是source_byte_array,就會轉換成stringstr=newstring(source_byte_array,B)。即這些位元組數組對應的字元被正確編碼顯示在內存中,此時列印結果正常。此步驟通常用於調試或控制台輸出測試。
3) 統一轉碼。
網路爬蟲系統中有很多數據源。如果無法使用數據,它將被轉換為其原始數據,如果這樣做是浪費的。所以一般爬蟲系統要對抓取的結果進行統一編碼,做到一致,使用方便。此時,在(2)的基礎上,可以進行統一的編碼轉換,在java中的實現如下。
源網頁的位元組數組是source_byte_array。
轉換為普通字元串:stringnormal_source_str=newstring(source_byte_array,c)。這時候可以直接用javaapi存儲,但是字元串往往不直接寫。因為一般爬蟲存儲是將多個源網頁存儲在一個文件中,所以要記錄位元組偏移量,所以下一步。 再將得到的str轉換為統一的編碼C格式的位元組數組,則byte[] new_byte_array=normal_source_str.getBytes(C)即可,此時即可用java io api將數組寫入文件,並記錄相應的位元組數組偏移量等,待真正使用時,直接io讀取即可。
爬蟲過程不僅會存在亂碼問題,還會存在網站爬取涉及法律、IP受限,爬取行為受限等等問題,這個時候就需要不斷去解決這些問題。

9. 如何解決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的作用以及使用方法,亂碼問題就會迎刃而解。

10. java資料庫中文亂碼怎麼解決

原因1:mysql資料庫中的數據本身就是亂碼
解決方案:
設置mysql編碼格式
<1>
停掉mysql服務
net
stop
mysql
<2>查詢mysql編碼格式
mysql>
show
variables
like
'character_set_%';
<3>默認就是瑞典latin1,換成自己的編碼,如utf8【gbk】
mysql>set
names
'utf8';
【一般在訪問之前執行這個代碼就解決問題了】
【它相當於下面的三句指令:】
【set
character_set_client
=
utf8;】
【set
character_set_results
=
utf8;】
【set
character_set_connection
=
utf8;】
<3>
啟動mysql服務
net
start
mysql
<4>
驗證編碼是否正確修改
mysql>
show
variables
like
'character_set_%';

熱點內容
php查詢結果數組 發布:2025-02-06 12:31:05 瀏覽:714
怎樣把照片壓縮打包 發布:2025-02-06 12:15:19 瀏覽:496
如何編譯java文件 發布:2025-02-06 12:05:58 瀏覽:237
九九乘法編程 發布:2025-02-06 12:05:05 瀏覽:519
台式機忘記開機密碼怎麼辦 發布:2025-02-06 11:58:01 瀏覽:871
android刷新按鈕 發布:2025-02-06 11:57:17 瀏覽:586
存儲過程有輸入參數和輸出參數 發布:2025-02-06 11:55:32 瀏覽:99
成績評選演算法 發布:2025-02-06 11:42:51 瀏覽:997
資料庫測試數據 發布:2025-02-06 11:31:05 瀏覽:824
球頭軸編程 發布:2025-02-06 11:29:36 瀏覽:283