欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Java中如何正確使用字體編碼

在Java編程中,中文字體編碼難倒了不少程序員,如果抓住了影響Java中文顯示的幾個(gè)關(guān)鍵因素,問(wèn)題將迎刃而解。

Java是目前最流行的面向對象的編程語(yǔ)言之一,Java支持UTF-8、ISO-8 859-1、GBK等各種字體編碼,可筆者發(fā)現Java中字體編的問(wèn)題仍難倒了不少程序員,網(wǎng)上雖然也有不少關(guān)于在Java中如何正確顯示中文的文章,但都不夠全面,筆者特意總結如下。

影響Java中字體編碼正確顯示的有幾個(gè)因素: 1)數據庫的連接方式; 2)網(wǎng)頁(yè)中使用的字體編碼; 3)數據庫里存放數據的字體編碼; 4)Java的缺省字體編碼。如果在編程中遇到不能正確顯示中文時(shí),要先弄清楚以上幾項所使用的字體編碼,再分析找出原因,即可解決問(wèn)題。

眾所周知,JSP是Java的一種,和網(wǎng)頁(yè)有關(guān),而網(wǎng)頁(yè)也有自己的中文編碼系統,所以JSP處理中文要比純Java的類(lèi)文件更為麻煩。本文的測試數據庫是MySQL3.2,數據庫連接驅動(dòng)是用org.gjt.mm.mysql.Driver,這里主要討論UTF-8和GBK的顯示( GB2312是GBK的一個(gè)子集,Java中可以使用GBK來(lái)代替GB系列)。我們先來(lái)研究JSP中字體編碼問(wèn)題, 下面第一到第六點(diǎn)是針對JSP的(因為從數據庫里讀出中文數據與寫(xiě)入中文數據有所區別,咱們分別說(shuō)明,前三點(diǎn)是從讀取數據庫到顯示在網(wǎng)頁(yè),后三點(diǎn)是從網(wǎng)頁(yè)輸入數據到存入數據庫),第七到第九點(diǎn)針對純Java的類(lèi)文件。 以下rs表示ResultSet的一個(gè)實(shí)例,是執行Select語(yǔ)句之后產(chǎn)生的數據集。

一、數據庫連接方式使用UTF-8

在連接數據庫的驅動(dòng)后面加上這句參數useUnicode=true&characterEncoding=

UTF-8,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&useUnicode=

true&characterEncoding=UTF-8,從數據庫里讀出中文顯示在使用GBK的JSP的網(wǎng)頁(yè)里,如果數據庫里存放的字體編碼是UTF-8,在JSP中使用 str=new String(rs.getBytes(1),"UTF-8")或者str=rs.getString(1),可以正確顯示中文。如果數據庫里存放的是GBK數據,那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")來(lái)顯示正確的中文。值得注意的是如果頁(yè)面使用UTF-8,數據庫里存放的是UTF-8,也可以用str=new String(rs.getBytes(1),"GBK")正確顯示中文。如果網(wǎng)頁(yè)是UTF-8,而數據庫里存放的是GBK,無(wú)法直接顯示中文,需要2步轉換, str=new String(rs.getBytes(1),"GBK"); 再str=new String(str.getBytes("UTF-8"),"GBK"),才可以正確顯示中文。

二、數據庫連接方式使用GBK

在連接數據庫的驅動(dòng)后面加上這句參數useUnicode=true&characterEncoding=

GBK,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&UseUnicode=true&

characterEncoding=GBK,從數據庫里讀出中文,顯示在使用GBK的JSP的網(wǎng)頁(yè)里,如果數據庫里存放的字體編碼是UTF-8,在JSP中一定要使用 str=new String(rs.getBytes(1),"UTF-8"),才正確顯示中文。如果數據庫里存放的是GBK數據,那么JSP中也要使用str=new String(rs.getBytes(1),"GBK") 或者直接使用str=rs.getString(1),即可顯示正確的中文。 如果網(wǎng)頁(yè)是UTF-8,而數據庫里存放的是GBK,只能用str=new String(rs.getString(1).getBytes("UTF-8"),"GBK")的方法來(lái)顯示中文; 如果網(wǎng)頁(yè)是UTF-8,而數據庫里存放的是UTF-8,可用str=new String(rs.getBytes(1),"GBK") 或者rs.getString(1)方法來(lái)顯示中文。

三、使用缺省數據庫連接方式

連接數據庫的驅動(dòng)后面沒(méi)有這句參數useUnicode=&characterEncoding=,例如jdbc:mysql://localhost/DBVF?autoReconnect=true,沒(méi)有參數useUnicode=true&characterEncoding,表示使用默認的ISO-8895-1編碼。

1. 從數據庫里讀出中文,顯示在GBK的網(wǎng)頁(yè)里。如果數據庫里存放的字體編碼是UTF-8,在JSP網(wǎng)頁(yè)中一定要使用語(yǔ)句 str=new String(rs.getBytes(1),"UTF-8") 或者str= new String(rs.getString(1).getBytes("ISO-8859-1"),"UTF-8"),才可正確顯示中文。如果數據庫里存放的是GBK數據,那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")或str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK") 顯示正確的中文。

2. 如果網(wǎng)頁(yè)是UTF-8,不能直接正確顯示GBK,需要2步轉換,str=new String(rs.getBytes(1),"GBK"),再str=new String(str.getBytes("UTF-8"),"GBK") 才可以正確顯示中文。如果數據庫里存的是UTF-8,直接用str=new String(rs.getBytes(1),"GBK")或者str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK")就可以顯示中文了。

以上是讀取數據庫里中文正確顯示在網(wǎng)頁(yè)上,下面三點(diǎn)是如何正確存入數據庫。

四、數據庫連接方式使用UTF-8編碼

JSP中要把網(wǎng)頁(yè)輸入的中文存入數據庫,通常有一個(gè)提交(Submit)的過(guò)程,是用str=request.getParameter("username"),然后執行update或者insert語(yǔ)句來(lái)存入數據庫。如何賦值給str很重要,而且這里中文輸入與網(wǎng)頁(yè)所使用的字體編碼有關(guān)。

1、 網(wǎng)頁(yè)使用UTF-8,使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")或者str= new String(request.getParameter("username").getBytes(),"UTF-8"),都可以使得存到數據庫里的數據是UTF-8編碼。

2. 網(wǎng)頁(yè)使用GBK,使用str= new String(request.getParameter("username").getBytes(),"GBK"),那么存入數據庫的是UTF-8編碼。

3. 值得注意的是使用UTF-8的數據庫連接方式不能存得GBK。

五、數據庫連接方式使用GBK編碼

1. 輸入使用GBK網(wǎng)頁(yè),存到數據庫里是GBK的方法: str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"GBK")。

2. 網(wǎng)頁(yè)使用GBK,想存入UTF-8到數據庫里,要分2步: 先str=new String(request.getParameter("username").getBytes(),"GBK"),再str=new String(str.getBytes("UTF-8"),"GBK")即可。

3. 網(wǎng)頁(yè)使用UTF-8,而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"UTF-8"),那么存到數據庫里的數據是UTF-8編碼。

4. 網(wǎng)頁(yè)使用UTF-8,而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"),那么存到數據庫里的數據是GBK編碼。

六、數據庫連接方式使用缺省,即不使用參數useUnicode和characterEncoding

1. 網(wǎng)頁(yè)使用GBK,如果使用str= request.getParameter("username")或者str= new String(request.getParameter("username").getBytes()),那么在數據庫里的數據是GBK碼。網(wǎng)頁(yè)使用UTF-8 和使用str= request.getParameter("username"),則存入數據庫是UTF-8編碼。

2. 如果使用str= new String(request.getParameter("username").getBytes("ISO-8859-1")),那么根據網(wǎng)頁(yè)提供的字體編碼而存到數據庫里,比如是UTF-8的網(wǎng)頁(yè),那么存到數據庫中就是UTF-8編碼,如果使用GBK網(wǎng)頁(yè),那么存到數據庫里的字就是GBK編碼。

3. 如果使用str= new String(request.getParameter("username").getBytes("UTF-8"),"UTF-8")這一種組合能存到正確的數據外,其他存到數據庫里的數據則都是亂碼或者錯誤碼。在這個(gè)UTF-8組合的特例中,網(wǎng)頁(yè)使用的是GBK,則存放到數據庫里就是GBK,網(wǎng)頁(yè)使用UTF-8,那么存到數據庫里的就是UTF-8。

4. 網(wǎng)頁(yè)是GBK的要存得UTF-8,一定需要2步: company=new String(request.getParameter("company").getBytes(),"GBK")和company=new String(company.getBytes("UTF-8"))。

5. 網(wǎng)頁(yè)是UTF-8的,不能存得GBK在數據庫里,一句話(huà),改變數據庫連接方式不能存得GBK碼。

以上所有的都是基于JSP網(wǎng)頁(yè)和數據庫交換數據,下面討論一下純JAVA編程下的字體編碼轉換。

七、數據庫連接方式使用UTF-8編碼

1. 數據庫里的中文是UTF-8,可以轉換為GBK,但不能把GBK存入數據庫。

2. 數據庫是GBK,如果轉換為UTF-8,使用content=new String(rs.getBytes(2),"GBK")直接將content存入數據庫就可為UTF-8。

八、數據庫連接方式使用GBK編碼

1. 數據庫里的中文是UTF-8,如果轉換為GBK,使用content= new String(rs.getString(2).getBytes(),"UTF-8"),再直接使用update或者insert語(yǔ)句插入到數據庫,即存得GBK。如果使用content= new String(rs.getString(2).getBytes(),"GBK")或者content= new String(rs.getString(2).getBytes()),再存入數據庫即存得還是UTF-8編碼。

2. 數據庫里的中文是GBK,如果轉換為UTF-8,使用content= new String(rs.getString(2).getBytes("UTF-8"))或者content= new String(rs.getString(2).getBytes("UTF-8"),"GBK"),再直接使用update或者insert語(yǔ)句插入到數據庫,即存得UTF-8。

3. 如果某個(gè)String是GBK,要轉換為UTF-8,也是使用content= new String(GBKstr.getBytes("UTF-8"))或者content= new String(GBKstr.getBytes("UTF-8"),"GBK"); 如果某個(gè)String是UTF-8,要轉換為GBK,應該使用new String(UTFstr.getBytes("GBK"),"UTF-8")。

九、數據庫連接方式使用缺省,即不跟參數

1. str2=new String(GBKstr.getBytes("UTF-8"),"ISO-8859-1"),可以將數據庫里的GBK編碼轉換為UTF-8。

2. 讀取UTF-8然后存入UTF-8,則用str1=new String(UTFstr.getBytes(),"ISO-8859-1")或者str1=new String(UTFstr.getBytes("GBK"),"ISO-8859-1")。

3. 不能實(shí)現數據庫里的UTF-8轉換為GBK。

如果采用UTF-8的數據庫連接方式或者缺省數據連接方式,那么無(wú)法將UTF-8轉為GBK;而GBK的數據庫連接方式可以實(shí)現UTF-8和GBK的相互轉換。建議大家采用GBK的數據連接方式。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
java字符串的各種編碼轉換類(lèi)ChangeCharset
java中文亂碼解決總結
java亂碼問(wèn)題分析
java 字符編碼處理
解決web服務(wù)器各種應用的亂碼問(wèn)題,歡迎補充和討論
java中文GBK和UTF-8編碼轉換亂碼的分析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久