Â
http://www.blogjava.net/errorfun/archive/2006/12/09/86584.html
ä¹±ç é®é¢å¥½åè·æ们ä¸å½ç¨åºåç¹å«æç¼ï¼ä¸ç´å°æ°çæ们ï¼ä»å¼å§çJSPä¹±ç é®é¢ï¼STRUTSä¹±ç é®é¢ï¼å°ç°å¨çAJAXä¹±ç é®é¢ï¼æ ä¸ä¸æ¯æå¾è®¸å¤ç¨åºåç¦å¤´çé¢çï¼æ´å¤©éªXXX产å对ä¸ææ¯æä¸äºï¼UTF-8æ æ³ä½¿ç¨ä¸æåä»ä¹çï¼å ¶å®è¿éé¢è¢«éªç产åä¸å ¶å®99ï¼ ä»¥ä¸æ¯å¯¹ä¸ææ¯æé常好çï¼èåºç°ä¹±ç çåå åªæ¯å 为èªèº«å¯¹å½é åæ¯æ以åæ件ç¼ç çä¿¡æ¯ç认è¯ä¸ç¥é æçãè¦ç¥éä¸ä¸ªäº§åé£ä¹æµè¡ï¼æä¹å¯è½å¯¹ä¸ææ¯æä¸äºå¢ï¼ä¸é¢å°±å¼å§ä¸ä¸å¸®å¤§å®¶è§£å³è¿äºé®é¢ã
1 ãç¼ç
     ï¼ï¼ æ³è¦è§£å³å¥½ä¸æé®é¢ï¼å¯¹ç¼ç è¯å®æ¯ä¸è½ä¸æ¦ä¸æäºï¼ç¼ç æ¯è§£å³ä¸æä¹±ç é®é¢çæ ¹æ¬ã
     ç¼ç æ¯è¾å¸¸ç¨çæï¼ UTF-8 ï¼ GBK ï¼ GB2312 ï¼ ISO-8859-1 ï¼é¤äº iso-8859-1 ä¹å¤çå ¶å®ä¸ä¸ªç¼ç é½è½å¾å¥½çæ¯æä¸æï¼ä½å®ä»¬é½å ¼å®¹ ISO-8859-1 çç¼ç ï¼å°±æ¯è¯´æ 论ç¼ç æä¹æ¹åï¼åªè¦æ¯ ISO-8859-1 ä¸çå符ï¼æ°¸è¿ä¸ä¼åºç°ä¹±ç ï¼ã
     è¿åç§ç¼ç ä¸ï¼ GB2312 æ¯ä¸å½è§å®çæ±åç¼ç ï¼ä¹å¯ä»¥è¯´æ¯ç®ä½ä¸æçå符éç¼ç ; GBK æ¯ GB2312 çæ©å± , é¤äºå ¼å®¹ GB2312 å¤ï¼å®è¿è½æ¾ç¤ºç¹ä½ä¸æï¼è¿ææ¥æçåå ; è UTF-8 è½ç¶ä¹æ¯æä¸æï¼ä½å´ ä¸ GB ç ä¸å ¼å®¹ï¼ç¼ç å¼ä¸åï¼ ã UTF-8 使ç¨çæ¯å¯åé¿ç UNICODE ç¼ç ï¼ç¼ç å¯è½æ¯ 1 ä½ 16 è¿å¶ï¼å³ ISO-8859-1 ä¸çå符ï¼å ¶ç¼ç ä¹æ¯ç¸åçï¼ä¹æå¯è½æ¯ 2 ä½æ 3 ä½ç 16 è¿å¶ã UTF-8 çä¼ç¹æ¯ï¼ 1 ã ä¸ CPU åè顺åºæ å ³ , å¯ä»¥å¨ä¸åå¹³å°ä¹é´äº¤æµã 2 ã容éè½åé« , ä»»ä½ä¸ä¸ªåèæåå , æå¤åªä¼å¯¼è´ä¸ä¸ªç¼ç ç ä½æ失 , ä¸ä¼é¾éé误 ( å¦ GB ç éä¸ä¸ªåèå°±ä¼æ´è¡ä¹±ç ) ï¼æ以å¨å½é åå¤çä¸åºæ¬é½æ¯å»ºè®®ä½¿ç¨ UTF-8 ä½ä¸ºç¼ç ã
2ãæ件çç¼ç
     ï¼ï¼è½ç¶è¯´åªè¦è®¾ç½®äºæ£ç¡®çç¼ç å°±å¯ä»¥ä½¿å符æ£ç¡®æ¾ç¤ºäºï¼ä½å¦æ忽ç¥äºæ件ä¿åæ¶çç¼ç çè¯ï¼é£å¯æ¯ä¼è®©ä½ èµ°è¿è¿·é¾ä¸çã
     æ件ç¼ç æ常使ç¨çæ两ç§ï¼ANSIåUTF-8ï¼å çååä¼°è®¡ä½ é½å¯ä»¥çå°äºï¼ANSIå°±æ¯æ们ä¿åæ件æ¶ä½¿ç¨çé»è®¤ç¼ç ï¼èUTF-8åéèªå·±è®¾ç½®ã对äºç¼ç çæ¹åï¼æ使ç¨çå·¥å ·æ¯NOTEPADåECLIPSEï¼NOTEPAD使ç¨æç®åï¼åªè¦æå¼æ件åå¨å¦å为ä¸éæ©ç¸åºçç¼ç å°±è¡äºï¼èä¸å®å¯¹ç¼ç çæ¯æé常好;èå¨ECLIPSEä¸ï¼åªè¦ç¨å¾®è®¾ç½®ä¸ä¸å°±è¡äºï¼æå¼é¦é项ï¼ç¶åéæ©ï¼å¸¸è§->å 容类å(ContentType)ï¼å¨å³è¾¹éä¸ä½ æ³æ¹åä¿åç¼ç çæ件类åï¼ç¶åå¨ä¸æ¹ç缺çç¼ç ä¸æ¹åå ¶å¼ï¼æåç¹å»æ´æ°ï¼UPDATEï¼æé®å³å¯ã
èå¨å ¶å®çç¼è¾å¨ä¸ï¼é»è®¤ä¿åçå 容é½æ¯GB2312æè GBKï¼NOTEPADä¸å¯¹åºANSIï¼.èæ ¹æ®åé¢æ说çUTF-8åGBK,GB2312ççç¼ç å¼æ¯ä¸åçè¿ä¸ç¹ï¼å¯ä»¥ç¥éï¼å¦ææ件使ç¨äºUTF-8ï¼é£ä¹å符ç¼ç å°±å¿ é¡»ä½¿ç¨UTF-8ï¼å¦åç¼ç å¼çä¸åå°±å¯è½é æä¹±ç ãèè¿ä¹å°±æ¯ä¸ºä»ä¹é£ä¹å¤ç人使ç¨äºUTF-8ç¼ç åè¿ä¼äº§çä¹±ç çæ ¹æ¬åå ãï¼JSåJSPé½æ¯è¿ä¸ªéçï¼
3ãJSP,STRUTSççä¸æä¹±ç 解å³æ¹æ¡
Â Â Â Â Â å ¶å®è§£å³çæ¹æ³åªæä¸ä¸ªï¼
 request.setCharacterEncoding(encoding);
   æ¹æ³åªæä¸ç§ï¼ä½å¤çæ¹å¼å°±å¤ç§å¤æ ·äºï¼åå¦è ä¼å¨JSP页é¢ä¸ç´æ¥ä½¿ç¨ï¼èæç»éªçç¨åºåä¼ä½¿ç¨è¿æ»¤å¨ãèç°å¨æè¦è¯´çæ¹æ³ä¹æ¯è¿æ»¤å¨ãè¿é以ç»ä¸ä½¿ç¨UTF-8ä½ä¸ºç¼ç ä½ä¸ºä¾å说æãå ·ä½è¿ç¨å°±ä¸å¤è¯´äºï¼ç½ä¸æå¾å¤æç¨ãå·æä¸ç¹çï¼å°TOMCATä¸å¤å¶å°±è¡äºãå¨TOMCATçç®å½ä¸ç/webapps/jsp-examples/WEB-INF/classes/filters/æ¾å°SetCharacterEncodingFilter.java è¿ä¸ªç±»ï¼æ¾å°ä½ çç¨åºä¸å¹¶é 置好æ å°è·¯å¾ãé 置好ååºæ¬ä¸ä½ çä¹±ç é®é¢å°±è§£å³äºãä½è¦æ å°è·¯å¾ä¸éè¦æ³¨æçå°±æ¯ä¸è½ä½¿ç¨ '*'
  < filter-mapping >
    < filter-name > Set Character Encoding </ filter-name >
    < servlet-name > * </ servlet-name >
  </ filter-mapping >
åä¸é¢è¿æ ·é ç½®çè¯(å¯è½ä¹æ¯ç½ä¸å¤§å¤æç¨çåæ³ï¼æ³å½å¹´ä¹æ¯å®³è¦äºæ)ï¼å¯è½ä½ åªæJSPçä¹±ç 解å³äºï¼è¦è§£å³STRUTSçä¹±ç éè¦æ å° *.do æè servletActionNameãç¶åå¨åå§ååæ°ä¸è®¾ç½®encodingçå¼å°±è¡äºã
< init-param >
      < param-name > encoding </ param-name >
      < param-value > UTF-8 </ param-value >
</ init-param >
å½ç¶ï¼æéè¦çæ¯è¦è®°å¾æ ¹æ®åé¢æ说çæ¹æ³ï¼æ¹åä½ æ使ç¨çç¼è¾å¨ä¿åæ件çç¼ç è¦ä¸ä½¿ç¨çå符ç¼ç ä¸è´ã
èå¨JSPå 容ä¸ï¼è¿æ¯ä½¿ç¨å¦ç½ä¸æç¨æ说çé£ç§æä¿©ï¼å¨ææ页é¢ç页é¦å å ¥ï¼
<% @ page language = "java" contentType = " text / html; charset = UTF - 8 "
    pageEncoding = "UTF - 8 " %>
è³æ¤ï¼ç¸ä¿¡JSP,ACTIONé½ä¸å¤ªå¯è½åºç°ä¹±ç äºã
4ãèµæºæ件çä¹±ç 解å³æ¹æ¡
     èµæºæ件è°é½ç¥éæ¯å½é åæ¯æä¸å¯æ缺çä¸é¨åï¼å¦æèµæºæ件é½åºç°ä¹±ç äºé£è¿äºå¾ï¼å ¶å®èµæºæ件çä¹±ç æ¯å¾å¥½è§£å³çï¼å ¶åå ä¹æ¯å 为使ç¨äºUTF-8å为JSPç¼ç åï¼æ²¡æç¸åºå°æ¹åèµæºæ件çæ件ç¼ç é æçï¼æ以åªè¦å¯¹èµæºæ件ä¿åçç¼ç è¿è¡æ´æ£åï¼ä¹±ç é®é¢ä¹å°±è§£å³äºãå½ç¶ï¼ä½ çä¸æè¦ä½¿ç¨ native2ascii å½ä»¤è¿è¡æ£ç¡®ç转æ¢ã
5ãè°ç¨JSæ¶ï¼JSå 容乱ç ç解å³æ¹æ¡ã
Â Â Â Â å ¶å®JSçä¹±ç è¿æ¯è·æ件çç¼ç æå ³ç³»çï¼å¦æJSä¸æä¸æçè¯ï¼é£JSæ件ä¿åçç¼ç å°±å¿ é¡»è·è°ç¨æ¤JSç页é¢ç¼ç ç¸åï¼å¦åï¼ä½ çææä¸æé½è¦ä»JSP页é¢ä¼ ç»JSæä¼æ¾ç¤ºæ£å¸¸ãå¯ä»¥çåºå¯¹äºè°ç¨JSåºç°çä¹±ç æ¯æ容æ解å³çï¼ä¹æ¯å»ºç«å¨åé¢çè¾è¦ä¹ä¸çï¼ã
6ãAJAXæ交æ°æ®ä¹±ç ï¼è¿åæ°æ®ä¹±ç ç解å³æ¹æ¡
    éçAJAXçæµè¡ï¼ä¹±ç é®é¢ä¹å¼å§å°æ°ç许å¤åå¼å§ä½¿ç¨å®çç¨åºåï¼å¹¸å¥½æä¹å对JSPä¹±ç æè¿ä¸ç¹ç 究ï¼å¨éå°AJAXåï¼å¹¶æ²¡æç»æ带æ¥å¤å¤§çå°æ°ï¼å¨æ¤å°æçä¸äºå¿å¾å ±äº«ç»å¤§å®¶ã
    ä¸åä¸ç¦»å ¶å®ï¼AJAXçä¹±ç é®é¢èªç¶è·ç¼ç æå ³äºï¼å ¶å®å¾å¤äººè·æä¸æ ·æ³å°äºå¯¹æ件ç¼ç è¿è¡è®¾ç½®ï¼å¹¶ä¸å¨æ¥æ°æ®æ¶è®¾ç½®äºrequetçç¼ç ï¼å¨è¿åçæ°æ®æ¶è®¾ç½®äºresponseçç¼ç ä¸åé½ä»¥ä¸ºä¼å¾é¡ºå©ï¼å¯æ¯è¿ä¸åé½æ¯å¾å³æ åçï¼è®¨åçä¹±ç åä¸æ¬¡åºç°å¨ä½ ç¼åãå¨ä½ è¯äºNå¤ç§æ¹æ³ï¼å æ¬JSèªèº«çescape,unescapeæ¹æ³åï¼ä½ åç°ä¹±ç ä»ç¶ççå°åºç°å¨å±å¹ä¸ã
Â Â Â å ¶å®å¨è¯è¿è¿Nå¤æ¹æ³åï¼å¾å¤äººé½æ²¡åç°ï¼è§£å³çæ¹æ³å ¶å®å¾ç®åï¼èä¸å ¶çæ¡å°±å¨æ们ä¹åå¤ççJSPä¹±ç ä¹ä¸ã让æ们å çä¸ä¸AJAXçç»å ¸è¯·æ±ä»£ç
Â
xmlhttp.open( "post" , url, async );
xmlhttp.setRequestHeader( "Content-Type", "text/html"  );
xmlhttp.send( params );
éè¿åé¢ç说æï¼ä¸ç¥éä½ ç°å¨çåºç«¯åªäºæ²¡æãä¸ç¥éæ¯åäºç½ä¸æç¨çå½±åè¿æ¯å ¶å®æ¹é¢å½±åï¼setRequestHeader并æ¯ä¸å¹´ä¸åçï¼ä¹æ²¡äººæ³è¿å»æ¹å®ï¼èé®é¢å°±æ£å¥½åºå¨è¿ä¸ªå°æ¹ãåæ³ä¸ä¸ªJSP页é¢å 容çç¼ç 设置ï¼å ¶ä¸æè¿ä¹ä¸èï¼
contentType="text/html;Â charset=UTF-8"
ç°å¨ç¥éé®é¢äºå§ï¼æ以æ们è¦æ第äºå¥ä»£ç æ¹ä¸ºï¼
xmlhttp.setRequestHeader( "Content-Type", "text/html;charset=UTF-8" );
æåå«å¿äºå¨è¿åæ°æ®æ¶ä¹è®¾ç½®ä¸ï¼
response.setContentType(Â " text/xml " Â );
response.setCharacterEncoding(Â " UTF-8 " Â );
æ¯ä¸æ¯å¾ç®åï¼ä¸ç¹é½ä¸éº»ç¦å¢ï¼
å¦æè¦é®ä¸ºä»ä¹çè¯ï¼å ¶å®æ们å¯ä»¥æxmlhttpçææ¯ä¸ä¸ªä¸´æ¶é¡µé¢ï¼å®ç±æµè§å¨å¨æçæï¼ä¸»è¦ä½ç¨æ¯å¨åå°è·å¾è¯·æ±çæ°æ®ï¼å¯ä»¥çææ¯ä¸ä¸ªé«çº§çiframeï¼ãæ以对äºæ®é页é¢è®¾ç½®çç¼ç ï¼å¯¹å®ä¹è¦åæ ·è®¾ç½®ãèå¨servletä¸è¿åæ°æ®ä¸ºä»ä¹è¦è®¾ç½®contentTypeåencodingå ¶éçä¹æ¯ä¸æ ·çãä¼æå¨ç¥ï¼jspçæåå½¢æå°±æ¯servletï¼èjsp页é¦è®¾ç½®çé£ä¸ªå å®¹å ¶å®ä¹å°±æ¯è®©çæçservletä¸çæè¿ä¹ä¸¤å¥è¯ï¼
response.setContentType(Â " text/html " Â );
response.setCharacterEncoding(Â " UTF-8 " Â );
èpageEncodingåæ¯è·jvm说æäºè¿ä¸ªé¡µé¢çå 容è¦ä½¿ç¨ä»ä¹ç¼ç ä¿åï¼è¿è·ä¹åçæçCLASSæå ³ç³»ï¼ãæ以å¨servlet设置responseçç¼ç ä¹æ¯çæå½ç¶çäºã
ä¸å£æ°æèªå·±ä¸å¹´ä»¥æ¥éå°çä¹±ç é®é¢å解å³çæ¹æ¡ååºæ¥äºï¼å¸æå¯¹ä½ ææ帮å©ã
Â