徹底解決程式亂碼問題
由於程式程式設計過程中存在眾多的編碼集,而這些編碼集又各自有自己的方法來表示一箇中文字元。由此,造成我們的程式顯示中文的時候亂碼。最多的是本來是中文,但結果顯示為問號?
這篇文章從我碰到過的問題來從根本上解決亂碼的問題,反正我用這個方法是百戰百勝^_^嘎嘎
我們知道,在我們的中文系統中使用的是“GBK”編碼集。
也就是說,比如我們從本地系統中讀入一個包含中文內容的.txt檔案,那麼我們從這個磁碟空間所獲得是流檔案是個經過“GBK”的。
但是,假如我們的JVM預設的編碼集是“ISO-8859-1”,那麼這個流檔案經過我們的JVM編碼就變成一個Unicode的字元或者字串。
是不是說的很抽象。
下面我具體解釋一下。
什麼是編碼?編碼說白了就是從位元組到字元(Unicode)的過程,因為我們的字元或字串在JVM中是用Unicode表示的,也就是說編碼實質上是獲取一個Unicode碼的過程。
我再來解釋一下解碼?解碼就是把JVM裡的Unicode碼轉換成我們本地字符集所表示的位元組流。
如果在程式設計過程中,JVM預設的字符集和我們的中文系統,或者資料庫檔案等採用的字符集不一樣。
這樣的情況下,如果我們僅僅是編碼,而不去解碼。也就說把本來用“GBK”的位元組流採用“ISO-8859-1”轉換成字元或字串,這個時候就產生了亂碼。
當然,現在JVM和中文系統預設的編碼集已經一樣了,所以產生這種情況的很少。但是在讀取資料庫檔案的時候依然會經常碰到這種情況。所以,我一貫主張從本質上來了解一個知識,然後才能融會貫通,應用自如,這是高手的境界,當然,我不能算高手^_^哈哈
好了,如果你現在還不明白編碼解碼怎麼回事?以及亂碼產生的原因。我想你可以去撞牆了。
那麼,編碼的時候兩個系統的字符集不一致,該怎麼辦呢?怎麼樣把他們變成一致?
如果有可以直接改變系統字符集的方法,那當然是最好的了。比如在JVM裡
Properties pps = System.getProperties();
pps.put("file.encoding","GBK");
這樣,就把JVM的預設字符集改變成“GBK”了。
那麼,如果沒有改怎麼辦?
什麼?沒辦法?那是不可能滴,沒有程式解決不了的問題,這也是偶滴名言,嘎嘎!
當然要再次編碼了,或者說重新編碼!
還記得不?剛才我們解碼的時候得到一個利用JVM解碼的字元或字串(也可以說Unicode)
好,如果不記得,麻煩你再看看上面寫的,記性太差了!
我們利用這個字元或字串再重新編碼。
我們把這個字元或字串再次現出原形,也就是位元組陣列。
byte[] data = str.getBytes("ISO-8859-1");
好,現在又獲得了“ISO-8859-1”字符集下的位元組陣列。
這個裡面就完整的存放著我們想要的漢字,哈哈。
得到了位元組陣列,不就好辦了嗎?
還不會?沒關係,我教你!
String newstr = new String(data,“GBK”);
好了,得到了我們完整的字串了!編碼變成!
這個字串就是我們要的中文系統下的字串,它又經過我們“GBK”編碼過了!
可以放心的輸出到中文系統下了。
其實說白了,編碼解碼就是把我們從系統得到的字元轉換成位元組陣列,然後對它用系統字符集加工,加工完後再重新包裝,再把它輸出。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=664992
相關文章
- 徹底解決Oracle中文亂碼Oracle
- 徹底解決Python編碼問題Python
- 徹底搞懂 python 中文亂碼問題Python
- 手把手教你寫網路爬蟲(8):徹底解決亂碼問題爬蟲
- 【轉載】徹底解決Linux下MySQL5.5的中文亂碼問題LinuxMySql
- 徹底解決Hive小檔案問題Hive
- 解決中文亂碼問題
- 解決SSH亂碼問題
- 透過 Pulsar 原始碼徹底解決重複消費問題原始碼
- 徹底解決windows標題欄字型變小問題Windows
- 如何徹底解決pip install慢的問題
- MySql中文亂碼問題解決MySql
- Jmeter 解決中文亂碼問題JMeter
- Java 解決中文亂碼問題Java
- RDSSQLSERVER解決中文亂碼問題SQLServer
- 解決MySQL中文亂碼問題MySql
- MYSQL亂碼問題解決方法MySql
- java中亂碼問題解決方法Java
- cat 輸出亂碼問題解決
- 解決plsql中中文亂碼問題SQL
- TongWeb下亂碼問題解決思路Web
- 解決使用Git Bash亂碼問題Git
- plsql查詢亂碼問題解決SQL
- 解決 plsql 遇到亂碼的問題SQL
- 解決Mysql匯入亂碼問題MySql
- oracle字元亂碼問題的解決Oracle字元
- 解決Flex裡的亂碼問題Flex
- flashfxp 亂碼,2種辦法解決flashfxp 亂碼問題
- 九種 “姿勢” 讓你徹底解決跨域問題跨域
- 利用WebBrowser徹底解決Web列印問題(包括後臺列印)Web
- JavaWeb 亂碼問題終極解決方案!JavaWeb
- java中解決request中文亂碼問題Java
- SpringMvc解決Restful中文亂碼問題SpringMVCREST
- 解決confluence的亂碼問題
- 解決CentOS 中顯示亂碼問題CentOS
- python 中文亂碼問題解決方案Python
- 讀mysql中文亂碼問題解決方法MySql
- DES加密中文亂碼問題的解決加密