java亂碼有哪幾種可能?亂碼跟JAVA沒有半毛錢關系,但是JAVA開發(fā)中亂碼問題隨處可見!

先解釋下亂碼是怎么產(chǎn)生的:

我們都知道計算機機器識別的是電信號,也就是高低電平,對應數(shù)字中的1和0,也就是說所有語言在最后執(zhí)行的時候都是解釋為0和1了,我們把原本的文字,字母,符號轉(zhuǎn)化為二進制數(shù)據(jù)(0和1的序列)稱之為編碼,反過來稱之為解碼!

最早的編解碼規(guī)則是美國定制的ASCII(美國信息交換標準代碼),把a-z,A-Z,還有鍵盤上的一些鍵(空格,tab等)定義了一套轉(zhuǎn)化,比如A是65,對應的二進制為01000001。

java亂碼有哪幾種可能

但是ASCII是對英語量身定做的,對于中文漢字等不提供支持,所以國家專門提出了第一個中文編碼GB2312,但是GB2312也只提供六千多個字的編碼,中文博大精深沒法覆蓋,于是全新的GBK,utf-8等支持中文的編碼相繼出現(xiàn),后來GBK和utf-8廣泛應用在我們的日常開發(fā)中。

但是由于各種編碼方式的標準不同,相同的字也可能會得到不同的編碼,解碼的時候也會差異巨大,比如編碼的時候用utf-8,解碼的時候使用GBK,解釋出來的文字可能就是亂碼了!

java亂碼有哪幾種可能

那為什么說JAVA中的亂碼很多呢?因為亂碼主要發(fā)生在網(wǎng)頁,數(shù)據(jù)庫存取時,都是JAVA的常用場景,舉例如下:

①,頁面使用gb2312,后臺傳數(shù)據(jù)使用別的編碼,可盡量選擇同一個編碼方式!

②,后臺接受參數(shù)為亂碼,比如使用tomcat,就很容易出現(xiàn)亂碼,通常在tomcat的server.xml文件中設置解碼方式,和應用程序中添加字符過濾!

③,讀取文件出現(xiàn)亂碼,按照文件的編碼定義方式來解碼,讀??!

④,數(shù)據(jù)庫根據(jù)需要選擇與業(yè)務系統(tǒng)對應的編解碼方式!

解決辦法:盡量使用同一種編解碼標準!

亂碼也算是開發(fā)中比較基本,也比較折磨人的問題了,只要注意編解碼對應上就行了。