A. 如何解決java中的中文亂碼問題
對於Java,由於默認的編碼方式是UNICODE,所以用中文也易出問題,常見的解決是:
String s2 = new String(s1.getBytes(「ISO-8859-1」),」GBK」);
1、utf8解決JSP中文亂碼問題
一般說來在每個頁面的開始處,加入:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
◆charset=UTF-8的作用是指定JSP向客戶端輸出的編碼方式為「UTF-8」;
◆pageEncoding="UTF-8",為了讓JSP引擎能正確地解碼含有中文字元的JSP頁面,這在LINUX中很有效;
◆request.setCharacterEncoding("UTF-8");是對請求進行了中文編碼。
有時,這樣仍不能解決問題,還需要這樣處理一下:
String msg = request.getParameter("message");
String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");
out.println(st);
B. java中編碼與解碼分別指什麼
java中編碼:URLEncoder.encode(strUri,"utf-8");
java中解碼碼:URLDecoder.decode(strUri,"utf-8");
C. java 中編碼解碼問題
new String(strLine.getBytes("iso8859-1"),"gb2312")
其實這里很好明白
首先將字元串轉換成byte數組。。以iso8859-1的編碼來轉換。。
然後使用new String創建一個新字元串,前面帶上byte[]數組 後面帶上他的具體編碼。。
一般轉碼都使用這樣的方式。。JSP里經常出現亂碼的
都是加上過濾器然後中間使用這個new String(strLine.getBytes("iso8859-1"),"gb2312")方式將編碼轉換。
請採納答案,支持我一下。
D. 求java編碼和解碼的通俗解釋
在內存中,本來沒有字元的概念,每個位元組都是一個0-255的數字。我們把數字進行編號,每個數字代表一個字元。追根溯源,以ASCII碼為例。比如65(十進制)定義為字元'A',66定義為'B',61定義為'='。這就是編碼。然後才有了char型定義,實際上等同於byte,只是使用char型時就知道要表示的是字元。如果char ch=65,然後printf("%c",ch),出來就是'A',這就是解碼了。如果printf("%d",ch),那出來就仍是65。 單位元組byte只能支持0-255的編碼,對於亞洲語言,像中文漢字,是完全不夠用的。所以之後有雙位元組(0-65535)以及多位元組編碼的出現。以雙位元組為例,0-65535並不能同時為多種語言編碼。所以打個比方,同一個數字,可能在中文GBK編碼時定義為漢字'王',而在日文編碼MS932中就被定義為'小'。當內存中的數字被解釋為字元(文字和符號)時,就是解碼過程,把文字和符號用數字定義時就是編碼。實際編碼過程中,不少是前後位元組有關聯性定義的,並非我說的那麼簡單。 在網路傳輸時,實際上仍然是單位元組,甚至是位元組中1個bit一個bit傳輸的。我們在傳輸時使用byte數組,即基本類型,而在傳輸前後轉回GBK中文編碼。以老美的視角來看問題,則從byte變成亞洲語言(GBK/Unicode)屬於編碼encoding,而相反過程是解碼decoding。
E. java中文亂碼,能說下string.getBytes()和new String()轉碼是,具體點。
1、Java中,【String.getBytes(String decode)】的方法,會根據指定的decode,編碼返回某字元串在該編碼下的byte數組表示,例如:
byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1")
上面三行代碼表示:分別返回「中」這個漢字在GBK、UTF-8和ISO8859-1編碼下的byte數組表示,此時b_gbk的長度為2,b_utf8的長度為3,b_iso88591的長度為1。
2、而通過【new String(byte[], decode)】的方式來還原這個「中」字時,實際是使用decode指定的編碼來將byte[ ]解析成字元串,例如:
String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");
s_gbk和s_utf8都是「中」,而只有s_iso88591是一個不認識 的字元,因為ISO8859-1編碼的編碼表中,根本就沒有包含漢字字元,當然也就無法通過"中".getBytes("ISO8859-1")。
因此,通過【String.getBytes(String decode)】方法來得到byte[ ]時,要確定decode的編碼表中確實存在String表示的碼值,這樣得到的byte[ ]數組才能正確被還原。
(5)java中文解碼擴展閱讀
java中文編碼避免亂碼
1、為了讓中文字元適應某些特殊要求(如http header頭要求其內容必須為iso8859-1編碼),可能會通過將中文字元按照位元組方式來編碼的情況,比如:
String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1")
2、上述例子中的s_iso8859-1字元串實際是三個在 ISO8859-1中的字元,在將這些字元傳遞到目的地後,目的地程序再通過相反的方式:
String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")
來得到正確的中文漢字。這樣就既保證了遵守協 議規定、也支持中文。
3、String.getBytes(String decode)方法會根據指定的decode編碼返回某字元串在該編碼下的byte數組表示這里是encode ,not decode,從字元串到位元組數組是編碼的過程,從位元組數組到字元串(即 new String(byte[] , charsetname))才是解碼的過程。