❶ java web中關於編碼的問題
pageEncoding 設置成gbk,這個屬性是告訴jvm編譯jsp文件時候以什麼編碼格式進行編譯。
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="gbk"%>
❷ java 做web項目什麼時候用gbk什麼時候用utf-8
UTF-8:Unicode TransformationFormat-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字元的一種多位元組編碼,它對英文使用8位(即一個位元組),中文使用24為(三個位元組)來編碼。UTF-8包含全世界所有國家需要用到的字元,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支持UTF8字元集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。
GBK是國家標准GB2312基礎上擴容後兼容GB2312的標准。GBK的文字編碼是用雙位元組來表示的,即不論中、英文字元均使用雙位元組來表示,為了區分中文,將其最高位都設定成1。GBK包含全部中文字元,是國家編碼,通用性比UTF8差,不過UTF8佔用的資料庫比GBD大。
對於一個網站、論壇來說,如果英文字元較多,則建議使用UTF-8節省空間。不過現在很多論壇的插件一般只支持GBK
❸ java web 編碼,中文顯示不了。 試過utf-8了,顯示的是問號。
Java中UTF-8轉GBK之所以不會出現中文亂碼,是因為UTF-8編碼為兼容性最大的字元集編碼,它本身就支持中文字元。
Java代碼轉碼範例:
String s = new String(ss.getBytes(),"GBK");
當你的內容本來就是正常的中文字元時,通過上面的語句轉為GBK編碼是不會有任何問題的,但如果你在轉碼之前的字元不是正確的中文字元,或者不是支持中文字元的字元集,那可能就會出現亂碼問題。
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,又稱萬國碼。由Ken Thompson於1992年創建。現在已經標准化為RFC 3629。UTF-8用1到6個位元組編碼UNICODE字元。用在網頁上可以同一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。
在Java開發中,特別是web開發,亂碼是一種很常見而且很頭疼的問題,這常常是由於頁面端、服務端、資料庫等幾處所使用的字元不一致所致,故開發中,保持編碼一致, 往往能減少由於亂碼而帶來的時間浪費,是一件非常重要的事情。
❹ java web開發,頁面處理Base64編碼
以使用Oracle資料庫舉例,有兩種實現方式.
一種是使用Clob類型欄位,存放Base64編碼之後的圖片,WEB應用程序在獲取到該欄位(String對象)之後,使用Base64進行反編碼,然後輸出.
還有一種是使用Blob二進制大對象欄位,直接存儲對象的位元組流.可以是任意的對象,例如圖片,視頻,文件等,然後WEB應用程序通過獲取Blob對象重新構造位元組流成為原本的對象.
但是無論使用哪一種方式,在真是業務開發中非必要的情況下是絕對不推薦的,因為數據越大,存取資料庫所發生的性能消耗就越高,應用程序的效率就會比較低下.在後續的系統移至也無法通過SQL腳本進行,只能通過Oracle DMP的方式進行.因為無論是long,Clob還是Blob,都是無法通過簡單的SQL進行插入的,推薦的做法是在資料庫VARCHAR2欄位存放該文件(圖片,視頻,文件等)的WEB容器相對路徑,WEB應用程序僅僅通過該路徑對需要訪問的對象進行鏈接.
❺ java web 中編碼流程是怎樣的!request.setCharacterEncoding()和 response.setCharacterEncoding()怎麼用
request.setCharacterEncoding()是從頁面得到數據,數據在往servlet中送的時候字元的編碼格式, response.setCharacterEncoding()是servlet給頁面送數據,也就是響應給頁面的字元編碼格式。這兩個都要與頁面的字元編碼一致。
如果要解決中文亂碼呢?最好用過濾器做。還有一個呢,就是我經常用的,把所有的編碼格式都設成GBK,這樣出現亂碼的概率小點,這是我的一點小小的經驗,你可以試試
❻ 如何解決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標簽屬性。
<!--不正確的寫法-->
<ahref="/hello/checkUser.html?opt=中文>使用者身份驗證"</a>
<!--使用UTF-8字元集進行URLEncoding的結果-->
<ahref="/hello/checkUser.html?opt=%E4%B8%AD%E6%96%87">使用者身份驗證</a>
<%@pageimport="java.net.URLEncoder"%>
<ahref="/hello/checkUser.html?opt=<%=URLEncoder.encode("中文","UTF-8")%>">使用者身份驗證</a>
<formaction="checkUser.html?opt=xxx"method="POST">
<inputtype="text"name="username"value="yyy"/>
<inputtype="text"name="username"value="zzz"/>
<inupttype="submit"value="submit"/>
</form>
Stringopt=request.getParameter("opt");
String[]users=request.getParameterValues("username");
Stringopt=request.getParameter("opt");
if(opt!=null&&!"".equals(opt)){
opt=newString(opt.getBytes("ISO-8859-1"),"UTF-8");
}
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";
}
}
}
<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>
例如,網頁上不應該產生這樣的鏈接:
[xhtml]view plain
正確的寫法是:
[xhtml]view plain
為此,方案之一可以在JSP網頁上使用腳本化語言進行URLEncoding處理。如:
[xhtml]view plain
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
表單提交時經伺服器端自動處理後與checkUser.html相對應的servlet(Servlet類或JSP網頁)可以通過下面的方式取得數據:
[java]view plain
默認情況下,伺服器對於接收到的application/x-www-form-urlencoded類型數據進行字元集為ISO-8859-1的URLDecoding處理,經過處理之後的字元串內碼為ISO-8859-1。對於沒有附加任何設置的HTTP伺服器而言,我們的servlet在取得數據之後必須進行相應的解碼處理,生成內碼為UTF-16(unicode)的字元串。
例如對於用戶端請求數據中以UTF-8字元集進行URLEncoding的數據,servlet需要進行如下方式的解碼:
[java]view plain
為了避免這種額外的編碼/解碼處理,也就是說讓伺服器了解到用戶端在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
我們可以在web.xml使用這個filter。web.xml的相應配置如下:
[xhtml]view plain
通過上述兩種方式的預處理,在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的作用以及使用方法,亂碼問題就會迎刃而解。
❼ java web程序與資料庫字元編碼問題
那就把jsp和servlet編碼設置為utf-8,一勞永逸
-------------------
樓上的,這樣試試
char c = '4';
int i = Character.getNumericValue(c);