java如何解決亂碼問題
做項目經常會遇到Java中的亂碼問題,那麼遇到亂碼問題怎麼解決呢?下面小編為大家解答一下,希望能幫到大家!
分析編碼與解碼
編碼就是將字符轉為字節,解碼就是就是將字節轉換為字符。
字節流與字符流
對文件的讀寫操作都是通過字節流來實現的,即使JAVA中有字符流,但是其底層仍然使用的字節流。
亂碼問題出現
java中使用最頻繁的是字符,當我們將文件讀入內存並在控制枱顯示時(字節流--->字符流),就需要用到解碼。如果文件是UTF-8編碼,而我們解碼時錯用成GBK(如果不指定編碼,JAVA會採取系統默認編碼)來解碼,那麼只能顯示亂碼。而我們寫文件時,最好指定編碼(UTF-8)。
解決方案
示例1
將字節流轉換為字符流時,我們指定編碼格式。這是我們文件也應該是gb2312編碼
public static String read(String filename) throws Exception { InputStream is = new FileInputStream(filename); BufferedReader in = new BufferedReader(new InputStreamReader(is, "gb2312")); //指定編碼格式 String s; StringBuilder sb = new StringBuilder(); while ((s = Line()) != null) { nd(s + "n"); } e(); return ring();}
示例2
直接通過字節流讀入,使用String轉換為字符時,指定編碼。
package an;import InputStream;import tStream;class BufferedInputFile { public static String read(String filename) throws Exception { @SuppressWarnings("resource") InputStream is = new FileInputStream(filename); byte[] b = new byte[1024]; (b); return new String(b, "gb2312"); }}public class MemoryInput { public static void main(String[] args) throws Exception { String filename = "E:/html/"; String s = (filename); tln(s); }}
陷阱
I/O操作中有個FileReader類,這個類隱藏了字節流轉為字符流的`細節,我們可以這樣使用。 BufferedReader in = new BufferedReader(new FileReader(filename)); 這樣,我們直接得到就是字符流了。但我們發現,我們並沒有去設置編碼,這是因為FileReader中採用了默認編碼方式。這就變得很危險了,如果其默認的編碼格式和我們文件的編碼不同,那麼讀出來的數據一定是亂碼。所以我們最好採用示例中的方式來進行流的轉換。
-
如何學好Java語言編程
決定好想學什麼編程語言了嗎,現在就讓我們開始學習吧。所有你需要做的就是打開一本書,然後開始閲讀,是這樣的嗎?不全是這樣的。learn-first我會給出學習第一門編程語言的理想方法佈局,你不僅應該學習這個佈局方法,還應該享受精通它——如果不能掌握的話。學習第一門...
-
Javascript和Java語言間的異同比較
雖然Javascript與Java有緊密的聯繫,但卻是兩個公司開發的不同的兩個產品。那麼js和java有什麼關係,兩種語言的不同點是什麼呢?以下是本站小編搜索整理的關於Javascript和Java語言間的異同比較,供參考學習,感興趣的小夥伴們可以參考一下!想了解更多相關信息請持續關...
-
計算機二級考試Java精選訓練題
下面是應屆畢業生考試網小編搜索整理的計算機二級考試Java精選訓練題,希望對大家有所幫助。[簡答題]本題中,在下畫線上填寫代碼,指定變量b為字節型,變量f為單精度實型,變量l為64位整型。publicclassjaval{publicstaticvoidmain(String[-]args){b=49;f=8.9f;l=0xfedl...
-
經典的Java main方法面試題10個
在java中,main()方法是java應用程序的入口方法。本文是本站小編搜索整理的關於經典的Javamain方法面試題10個,特別適合參加Java面試的朋友閲讀,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!1.不用main方法如何定義一個類?不行,沒有main方...