日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
談?wù)刉EB開發(fā)中的苦大難字符集問題

記得剛做javaweb開發(fā)的時候被這個編碼問題搞得暈頭轉(zhuǎn)向,經(jīng)常稀里糊涂的編碼正常了一會編碼又亂了。那個時候迫于項目進度大多都是知其然不知其所以然。后來有時間就把整個體系搞了個遍,終于摸通了來龍去脈。

創(chuàng)新互聯(lián)是專業(yè)的蕪湖縣網(wǎng)站建設(shè)公司,蕪湖縣接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行蕪湖縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

在C++的CGI開發(fā)時大家喜歡用latin,這個屬于字節(jié)方式的編碼格式,存儲mysql節(jié)約空間,而C++也是比較容易控制到byte級別的語言。所以經(jīng)過框架封裝基本也問題不大。

在Java語言中,要涉及修改編碼問題的地方還真多。一個地方?jīng)]有設(shè)好就會亂碼滿天飛。大概總結(jié)包括以下這幾部分:瀏覽器、服務(wù)器、數(shù)據(jù)庫、操作系統(tǒng)。

瀏覽器:

如果使用模板語言,html需要設(shè)置顯示的字符集。這個適用于瀏覽器判斷什么編碼顯示。

 
 
 
 
  1.  

擴展,瀏覽器識別編碼的順序:
1.如果HTTP頭部申明了charset,則會使用HTTP頭部的,
2.讓HTTP頭部沒有設(shè)置,則會去解析meta標(biāo)簽的,
3.如果meta也沒有的話,瀏覽器會根據(jù)是否設(shè)置了auto detect來進行編碼識別,
4.否則會使用本地UI的字符編碼。

服務(wù)器:
對于JSP等動態(tài)語言,需要在jsp頭部設(shè)置編碼格式,J2EE服務(wù)器解析這個JSP的時候才會把整個頁面編碼為UTF-8輸出,不然就按照系統(tǒng)默認編碼格式ISO-8859-1輸出了。JSP設(shè)置格式如下:

 
 
 
 
  1. <%@ page language= "java" contentType = "text/html; charset=UTF-8" 
  2.       pageEncoding ="UTF-8" %> 

大家都知道,JSP對應(yīng)的就是servlet。servlet的編碼對應(yīng)如下設(shè)置:

 
 
 
 
  1. public void service(HttpServletRequest request, HttpServletResponse response) 
  2. throws ServletException,IOException{ 
  3. response.setContentType("text/html;charset=utf-8"); 

還有不要漏掉大家常用的spring工具類,編碼轉(zhuǎn)換filter,很實用。在你用struts、spring mvc時這個過濾器幫你轉(zhuǎn)換沒有設(shè)置的編碼過濾。如下設(shè)置:

 
 
 
 
  1.  
  2.              Set Character Encoding 
  3.              
  4.                  org.springframework.web.filter.CharacterEncodingFilter 
  5.              
  6.              
  7.                    encoding 
  8.                    UTF-8 
  9.              
  10.        

萬一還有亂碼怎么辦呢?doGet方式的參數(shù)傳遞肯定會有亂碼問題。只需要在tomcat的監(jiān)聽器里設(shè)置編碼字符集如下(文件一般存儲在 /tomcat安裝目錄/conf/server.xml ):

 
 
 
 
  1.               connectionTimeout="20000" 
  2.               redirectPort="8443" URIEncoding="utf-8"   /> 

大家在開發(fā)的時候別忘了java文件本身也是有編碼格式的。在類文件右鍵查看屬性。

如果開發(fā)時忘記更改文件的編碼格式,windows默認是GBK的,后來又要一直到utf8編碼的linux怎么辦。文件巨多,總不能一個一個去更改吧。其實很簡單,只需要在java命令的環(huán)境參數(shù)設(shè)置 -Dfile.encoding=GBK 解決。

編譯java代碼時,如果使用ant需要在javac里設(shè)置編譯的字符集。這樣打印的log輸出到文件或者控制臺上就不會亂碼了。

 
 
 
 
  1.  

maven編譯時設(shè)置的字符集:

 
 
 
 
  1. < artifactId> maven-compiler-plugin  
  2.        < version> 2.5  
  3.                         
  4.          < configuration> 
  5.            < optimize> true  
  6.            < showDeprecation> false  
  7.            < debuglevel> lines,source  
  8.             < source> 1.6  
  9.             < target> 1.6  
  10.             < encoding> UTF-8  
  11.             < meminitial> 128m    
  12.              < maxmem> 768m  
  13.                         
  14.           

sqlmap的sql xml,sping的xml 也是需要設(shè)置的,因為涉及到跨平臺。 頂上添加:

 
 
 
 
  1.  

數(shù)據(jù)庫:
這里列出大家用的最多的Mysql字符集設(shè)置。打開mysql的配置文件( linux 一般在 /etc/my.cnf ,windows在mysql的安裝目錄 my.ini)。設(shè)置如下:

 
 
 
 
  1. [mysqld] 
  2. default-character-set = utf8 
  3.  
  4. [ mysql] 
  5. character_set_server = utf8 

jdbc需要設(shè)置

jdbc : mysql://192.168.0.237:3306/dzh_db?useUnicode=true&characterEncoding=UTF-8

這些都設(shè)置了一般的中文是不會有問題的。

不過最近出現(xiàn)了一個問題很搞怪。以前以為所有的字符只要設(shè)置好了所有數(shù)據(jù)都可以錄入數(shù)據(jù)庫,結(jié)果有些字符就不行,比如●■這類型的。后來把這些字符變成字節(jié)碼,居然不是三位utf8的,我擦,大汗淋漓。后來查詢可以通過過濾utf8 特殊字符的方式處理。

#p#

 
 
 
 
  1. public static String Utf2String (byte buf[]) { 
  2. int len = buf.length ; 
  3. StringBuffer sb = new StringBuffer(len / 2); 
  4. for (int i = 0; i < len; i++) { 
  5.  
  6. if (by2int(buf[i]) <= 0x7F) 
  7. sb.append(( char ) buf[i]); 
  8. else if (by2int(buf[i]) <= 0xDF && by2int(buf[i]) >= 0xC0) { 
  9. int bh = by2int(buf[i] & 0x1F); 
  10. int bl = by2int(buf[++i] & 0x3F); 
  11.  
  12. bl = by2int(bh << 6 | bl); bh = by2int(bh >> 2); 
  13. int c = bh << 8 | bl; 
  14. sb.append(( char ) c); 
  15. } else if (by2int(buf[i]) <= 0xEF && by2int(buf[i]) >= 0xE0) { 
  16. int bh = by2int(buf[i] & 0x0F); 
  17. int bl = by2int(buf[++i] & 0x3F); 
  18. int bll = by2int(buf[++i] & 0x3F); 
  19.  
  20. bh = by2int(bh << 4 | bl >> 2); 
  21. bl = by2int(bl << 6 | bll); 
  22.  
  23. int c = bh << 8 | bl; 
  24. // 空格轉(zhuǎn)換為半角 
  25. if (c == 58865) { 
  26. c = 32; 
  27. sb.append(( char ) c); 
  28.  
  29. return sb.toString(); 

或者把mysql的字符集改為 utf8mb4 ,記得這個只有mysql55支持哦!

 
 
 
 
  1. [mysqld] 
  2. default-character-set =utf8mb4 
  3.  
  4. [ mysql] 
  5. character_set_server = utf8mb4 

操作系統(tǒng):

windows默認是gbk,一般不需要變動。不過大家又想每個文件都要建立為utf8格式怎么辦,不可能我們每個文件建立后都去用屬性改變一下?太麻煩!直接在eclipse設(shè)置后,同種類型的文件建立都會是utf8格式。

linux,可以有兩個地方修改基本就足夠了:

vi /etc/sysconfig/i18n

修改

 
 
 
 
  1. LANG="zh_CN.GB3212" 
  2. LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" 
  3. SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en" 

vi /etc/profile

 
 
 
 
  1. export LC_ALL="zh_CN.GB2312" 
  2. export LANG="zh_CN.GB2312" 

當(dāng)前標(biāo)題:談?wù)刉EB開發(fā)中的苦大難字符集問題
鏈接地址:http://m.5511xx.com/article/dhecdjj.html