国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺談如何解決Java/JSP中文亂碼問題

開發 后端
自從接觸Java/JSP以來,就不斷與Java的中文亂碼問題打交道,現在終于得到了徹底的解決,現將我們的解決心得與大家共享。

一、Java中文問題的由來

Java的內核和class文件是基于unicode的,這使Java程序具有良好的跨平臺性,但也帶來了一些中文亂碼問題的麻煩。原因主要有兩方面,Java和JSP文件本身編譯時產生的亂碼問題和Java程序于其他媒介交互產生的亂碼問題。

首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字節流的,如果Java和JSP編譯成class文件過程中,使用的編碼方式與源文件的編碼不一致,就會出現亂碼。基于這種亂碼,建議在Java文件中盡量不要寫中文(注釋部分不參與編譯,寫中文沒關系),如果必須寫的話,盡量手動帶參數-ecoding GBK或-ecoding gb2312編譯;對于JSP,在文件頭加上或基本上就能解決這類亂碼問題。

本文要重點討論的是第二類亂碼,即Java程序與其他存儲媒介交互時產生的亂碼。很多存儲媒介,如數據庫,文件,流等的存儲方式都是基于字節流的,Java程序與這些媒介交互時就會發生字符(char)與字節(byte)之間的轉換,具體情況如下:

從頁面form提交數據到java程序 byte->char

從java程序到頁面顯示 char?>byte

從數據庫到java程序 byte?>char

從java程序到數據庫 char?>byte

從文件到java程序 byte->char

從java程序到文件 char->byte

從流到java程序 byte->char

從java程序到流 char->byte

如果在以上轉換過程中使用的編碼方式與字節原有的編碼不一致,很可能就會出現亂碼。

二、Java/JSP中文亂碼的解決方法

前面已經提到了Java程序與其他媒介交互時字符和字節的轉換過程,如果這些轉換過程中容易產生亂碼。解決這些亂碼問題的關鍵在于確保轉換時使用的編碼方式與字節原有的編碼方式保持一致,下面分別論述(Java或JSP自身產生的亂碼請參看***部分)。

1、JSP與頁面參數之間的亂碼

JSP獲取頁面參數時一般采用系統默認的編碼方式,如果頁面參數的編碼類型和系統默認的編碼類型不一致,很可能就會出現亂碼。解決這類亂碼問題的基本方法是在頁面獲取參數之前,強制指定request獲取參數的編碼方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。

如果在JSP將變量輸出到頁面時出現了亂碼,可以通過設置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解決。

如果不想在每個文件里都寫這樣兩句話,更簡潔的辦法是使用Servlet規范中的過慮器指定編碼,過濾器的在web.xml中的典型配置和主要代碼如下:

  1. web.xml:  
  2. CharacterEncodingFilter  
  3. net.vschool.web.CharacterEncodingFilter  
  4. encodingGBK  
  5. CharacterEncodingFilter  
  6. /*  
  7. CharacterEncodingFilter.java:  
  8. public class CharacterEncodingFilter implements Filter  
  9. {  
  10. protected String encoding = null;  
  11. public void init(FilterConfig filterConfig) throws ServletException  
  12. {  
  13. this.encoding = filterConfig.getInitParameter("encoding");  
  14. }  
  15. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException  
  16. {  
  17. request.setCharacterEncoding(encoding);  
  18. response.setContentType("text/html;charset="+encoding);  
  19. chain.doFilter(request, response);  
  20. }  

2、Java與數據庫之間的亂碼

大部分數據庫都支持以unicode編碼方式,所以解決Java與數據庫之間的亂碼問題比較明智的方式是直接使用unicode編碼與數據庫交互。很多數據庫驅動自動支持unicode,如Microsoft的SQLServer驅動。其他大部分數據庫驅動,可以在驅動的url參數中指定,如如mm的mysql驅動:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。

3、Java與文件/流之間的亂碼

Java讀寫文件最常用的類是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字節流的,常用于讀寫二進制文件。讀寫字符文件建議使用基于字符的FileReader和FileWriter,省去了字節與字符之間的轉換。但這兩個類的構造函數默認使用系統的編碼方式,如果文件內容與系統編碼方式不一致,可能會出現亂碼。在這種情況下,建議使用FileReader和FileWriter的父類:InputStreamReader/OutputStreamWriter,它們也是基于字符的,但在構造函數中可以指定編碼類型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。

4、其他

上面提到的方法應該能解決大部分亂碼問題,如果在其他地方還出現亂碼,可能需要手動修改代碼。解決Java亂碼問題的關鍵在于在字節與字符的轉換過程中,你必須知道原來字節或轉換后的字節的編碼方式,轉換時采用的編碼必須與這個編碼方式保持一致。我們以前使用Resin服務器,使用smartUpload組件上傳文件,上傳文件同時傳遞的中文參數獲取沒有亂碼問題。當在Linux中把Resin設置成服務后,上傳文件同時的中文參數獲取出現了亂碼。這個問題困擾了我們很久,后來我們分析smartUpload組件的源文件,因為文件上傳采用的是字節流的方式,里面包含的參數名稱和值也是字節流的方式傳遞的。smartUpload組件讀取字節流后再將參數名稱和值從字節流中解析出來,問題就出現在smartUpload將字節流轉換成字符串時采用了系統默認的編碼,而將Resin設置成服務后,系統默認的編碼可能發生了改變,因此出現了亂碼。后來,我們更改了smartUpload的源文件,增加了一個屬性charset和setCharset(String)方法,將upload()方法中提取參數語句:

  1. String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 ); 

改成了

  1. String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset ); 

終于解決了這個Java/JSP中文亂碼亂碼問題。

責任編輯:彭凡 來源: CSDN博客
相關推薦

2009-06-30 15:22:55

JSP頁面

2017-08-02 15:51:24

PHP中文亂碼

2011-08-08 10:29:12

MySQL

2015-04-01 10:26:32

開發中文亂碼問題

2009-06-30 13:49:21

excel文檔Jsp

2009-07-01 18:05:54

JSP中文亂碼

2009-07-02 13:26:32

JSP中文亂碼

2009-07-22 13:32:24

JDBC SQL

2009-07-07 13:42:57

Servlet JSP

2009-07-07 18:20:54

JSP頁面顯示亂碼

2010-05-24 11:17:41

MySQL數據庫

2010-03-11 16:33:07

Python連接數據庫

2009-07-01 18:14:36

JSP亂碼

2012-06-19 14:35:24

JSPJava亂碼

2009-11-26 16:30:52

Suse中文亂碼問題

2011-02-24 10:48:51

FireFTP

2010-10-08 11:41:38

PHP連接MYSQL

2012-03-21 10:16:31

JavaJSP

2012-09-05 11:09:15

SELinux操作系統

2010-11-09 17:09:23

SQL Server中
點贊
收藏

51CTO技術棧公眾號

日韩欧美国产电影| 国产成人精品免费久久久久| 亚洲精品白浆高清久久久久久| 日韩a级黄色片| 精品av一区二区| 日韩电影中文 亚洲精品乱码 | 91精品网站在线观看| h视频久久久| 一本色道久久88综合亚洲精品ⅰ| 福利在线观看| 亚洲激情偷拍| 国产深夜精品福利| 九九视频精品全部免费播放| 久久精品99无色码中文字幕| 欧美另类极限扩张| 国产精品久久久久久久久免费桃花| 人妻夜夜添夜夜无码av| 久久国产夜色精品鲁鲁99| 国产美女搞久久| 欧美精品午夜| 亚洲成人18| 不卡视频在线观看| 亚洲欧洲久久| 欧美欧美欧美欧美| av小说在线播放| 亚洲午夜国产成人av电影男同| 日韩欧美中文字幕在线视频| 色国产综合视频| 色成人亚洲网| 99视频精品在线| 蜜臀av无码一区二区三区| 一本大道久久精品懂色aⅴ| 国产原厂视频在线观看| 日本福利一区二区| sdde在线播放一区二区| 在线视频二区| 色综合天天视频在线观看| 成人影视亚洲图片在线| 日本免费高清不卡| 男女男精品视频| 视频二区一区| 麻豆亚洲精品| 艳母动漫在线观看| 狠狠色香婷婷久久亚洲精品| 都市激情一区| 欧美精品一区在线| 91小视频免费看| 日韩一级免费在线观看| 亚洲午夜私人影院| 免费av高清| 亚洲视频电影图片偷拍一区| 日韩精品一区二区三区av| 久久亚洲电影天堂| 日韩第二十一页| 久久精品亚洲94久久精品| 亚洲国产精品国自产拍av| 暖暖日本在线观看| 色先锋资源久久综合5566| 噜噜噜天天躁狠狠躁夜夜精品| 欧洲高清一区二区| 日韩欧美中文字幕制服| 欧美jizz| 国产原创popny丨九色| 在线观看一区二区精品视频| 偷拍一区二区| 亚洲一区二区蜜桃| 亚洲欧美制服第一页| 色综合婷婷久久| 国产电影精品久久禁18| 欧美精品videossex少妇| 欧美在线激情视频| 国产欧美视频一区二区三区| 日韩三级免费| 国产精品制服诱惑| 欧美午夜精品电影| 国产一区二区三区亚洲综合| 国产精品一区二区无线| 国内精品视频一区二区三区八戒| a美女胸又www黄视频久久| 无人区乱码一区二区三区| 国产主播福利在线| 国产在线视频2019最新视频| 日韩在线视频一区| 中文字幕成人在线| 国产一区二区电影| 成av人电影在线观看| 亚洲欧洲久久| 动漫3d精品一区二区三区| 精品国产伦一区二区三区观看体验| 黄色成人精品网站| 国产偷激情在线| 久久精品中文字幕一区| 亚洲欧美国产精品| 国产精品一级片在线观看| 国产专区欧美精品| 午夜在线观看免费一区| 国产精品伊人| 久久美女福利视频| 最近2019中文字幕大全第二页| 精品区一区二区| 日本不卡一区二区| 成人永久在线| 自拍偷拍一区| 亚洲黄色免费av| 丁香花在线影院观看在线播放| 91在线免费视频| 视频在线在亚洲| 蜜桃av.网站在线观看| 欧美在线观看视频免费| 色综合久久88| 国产精品久久综合| 精品国产91久久久久久浪潮蜜月| 奇米狠狠一区二区三区| 影音先锋一区| 日韩电影不卡一区| 国产精品久久久久9999高清| 国产高清免费av在线| 欧美日韩免费做爰大片| 青青草视频在线免费播放| 免费观看v片在线观看| 在线观看免费观看在线91| 免费久久久一本精品久久区| 亚洲女人天堂av| 国产精品第1页| 日韩在线观看精品| 亚洲精品久久久久久久久| 欧美高清视频一二三区| 国产亚洲精品久久久优势| 午夜欧美不卡精品aaaaa| 日韩精品在线播放| 日韩美女久久久| av不卡在线看| a看欧美黄色女同性恋| 伊人久久成人| 麻豆精品在线观看| 亚洲国产精品高清| 在线看欧美日韩| 久久久久久99| 91精品网站| 日韩av一卡二卡| 国产ts人妖一区二区三区| 国产3p露脸普通话对白| 日本在线观看网站| 一区二区三区韩国| av伦理在线| 亚洲影院免费| 色综合久久中文综合久久97| 日韩中文在线中文网三级| 中文字幕一区二区三区乱码| 久久久综合亚洲91久久98| 领导边摸边吃奶边做爽在线观看| 国产精品久久久久av电视剧| 国产色婷婷在线| 永久免费毛片在线播放| 日韩av一级片| 日韩欧美成人激情| 免费99视频| 黄色漫画在线免费看| www一区二区三区| 成人免费观看视频| 欧美激情综合在线| 久久精品久久久久久| a级网站在线观看| 裸体av在线| 亚洲黄色在线| 正在播放亚洲一区| 欧美精品在线网站| 韩国一区二区电影| 日本日本19xxxⅹhd乱影响| 污视频免费在线观看网站| 日本在线视频www| 久草资源在线观看| 国产精品资源| 欧美日韩中文国产| 亚洲人成在线播放| 亚洲精品久久久久久久蜜桃臀| 日韩精品视频一二三| 日本视频一二区| 99精品视频在线观看免费播放| 美女视频网站黄色亚洲| 亚洲欧美日韩视频一区| 农村寡妇一区二区三区| 国产免费拔擦拔擦8x在线播放| 成人激情免费电影网址| 欧美成人高清视频| 粗大的内捧猛烈进出在线视频| 国产在线资源| 夫妻av一区二区| 精品国产99国产精品| 日韩精品久久一区二区| 成人日韩视频| 色综合久久中文字幕综合网 | 亚洲男人的天堂在线aⅴ视频| 色嗨嗨av一区二区三区| 日韩成人三级视频| 天天躁日日躁成人字幕aⅴ| 欧美精品一区视频| 超碰在线12| 成人av在线资源| 51蜜桃传媒精品一区二区|